2012-06-14 2 views
0

두 개의 텍스트 파일이 있습니다. hash_only.txt 및 final_output.txt hash_only.txt는 다음과 같습니다.bash를 사용한 파일 및 텍스트 처리

193548 
401125 
401275 

final_output.txt는 다음과 같습니다.

193548  1199687744 5698758206701808640 
193548  1216464960 5698758206761818112 
193548  1216464960 5698758206778417152 
193548  4236691520 5698758206778945280 
401125  2138607488 5698762375908890880 
401125  863932288 5698762375909423360 
401125  3884158848 5698762375910044160 
401125  2609483648 5698762375911032320 

다음을 수행하는 루프를 작성하려고합니다. I '는 final_output.txt'파일로부터 열을 추출 2,3- 할 등과 같은 193548,401125 hash_only.txt 모든 값

for i in `cat hash_only.txt` ; 
do 
    for j in `cat final_output.txt` ; 
      do 
        if [ $i -eq $j ] 
        then 
          echo $i $j  
        fi 
      done 
done; 

여기서 1 개 열에 일치 193548,401125 등 출력 컬럼 2 , 3 to print_193548, print_401125 등

위의 코드에서 나는 bash에 능숙하지 않기 때문에 그 부분에 코드를 넣어야합니다. 그러나 나는 그것을 이해할 수 없습니다.

편집 :

지금 cat hash_only.txt에 내가 likefor 보는 내 스크립트를 수정 한;

do 
     for j in `cat final_output.txt` ; 
       do 
         if [ $i -eq $j ] 
         then 
           gawk 'FNR==NR 
             { hash[$1] 
              next 
             } 
             $1 in hash { 
             print $2,$3 >> "print_"$1; 
           }' hash_only.txt final_output.txt 
         fi 
       done 
done; 

print_ [0-9] *라는 파일을 만들지 않습니다. 왜 그런지 이해할 수 없습니까?

+1

그래서 여러 파일을 만들고 싶습니다. 맞습니까? 첫 번째 파일의 고유 한 값마다 하나씩? –

+0

예. 정확히 내가 원하는 것입니다. – liv2hak

+1

'gawk' 명령은 모든 작업을 수행합니다. 'if ... else' /'for ... loop'을 삭제할 수 있습니다. – kev

답변

1
awk ' 
FNR==NR { 
    hash[$1] 
    next 
} 
$1 in hash { 
    printf("%s\t%s\n", $2, $3) > "print_"$1; 
}' hash_only.txt final_output.txt 

내 솔루션은 피터와 거의 같습니다.

+0

당신은 내 코드에서 if then 부분 뒤에이 코드를 추가 할 것을 제안하고 있습니까? 나는 그것을 시험해 보았습니다. 작업하는 것처럼 보이지 않았습니다. 단지 일련의 값을 출력했습니다. – liv2hak

+1

복사하여 터미널에 붙여 넣으십시오. 현재 디렉토리에 두 개의 파일 ('print_193548','print_401125')을 생성합니다. – kev

+2

'>>'은'>'이어야합니다 (쉘보다 AWK에서 조금 다르게 작동합니다). –

2

이 시도 :

nawk 'FNR==NR{a[$0];next}($1 in a){print $2,$3>$1}' hash_only.txt final_output.txt 

이것은 실제로 첫 번째 필드와 같은 이름을 가진 파일을 생성하고 요청한 방식으로 출력을 저장합니다.

+0

괄호를 생략 할 수 있습니다. –