두 개의 파일이 있습니다. 파일 1은 단 하나의 열에 191줄이 있는 입력 파일입니다. 파일 2는 2개의 열과 712개의 줄이 있는 기본 파일입니다.
출력 = Input_File과 Master_File의 첫 번째 열 사이에서 일치하는 항목을 찾은 다음 행과 일치하는 Master_File의 행을 인쇄합니다.
입력 파일 예:
2190
2209
2214
2234
2261
2287
2303
2320
13773
29292
마스터 파일 예:
945713 Ignavibacterium_album_JCM_16511_uid162097
521045 Kosmotoga_olearia_TBF_19_5_1_uid59205
1254432 Sorangium_cellulosum_So0157_2_uid210741
1144275 Corallococcus_coralloides_DSM_2259_uid157997
59374 Fibrobacter_succinogenes_S85_uid41169
741091 Rahnella_Y9602_uid62715
83332 Mycobacterium_tuberculosis_H37Rv_uid57777
103690 Nostoc_PCC_7120_uid57803
115713 Chlamydophila_pneumoniae_CWL029_uid57811
158879 Staphylococcus_aureus_N315_uid57837
for 루프에서 grep을 사용하려고 합니다.
for i in $(cat Input_File); do grep $i Master_File; done
그러나 이 명령은 Master_File의 두 열 모두에서 일치하는 항목을 검색합니다.
awk를 사용하여 첫 번째 열만 인쇄하는 방법을 알고 있지만 일치하는 행을 인쇄하는 목적은 Master_File에서 두 번째 열 정보를 얻는 것입니다.
awk를 사용하여 Master_File의 첫 번째 열을 인쇄하고, Input_File을 참조하여 for 루프를 사용하여 일치하는 항목을 찾고, Master_File에서 일치하는 행을 인쇄할 수 있습니까?
아니면 더 간단한 명령 방법에 대한 제안 사항이 있습니까?
답변1
이 awk 명령을 사용해보십시오
awk 'NR==FNR{Arr[$0]++;next}{if($1 in Arr){print $0}}' input_file master_file
입력 파일을 읽고 내용을 배열에 저장한 다음 두 번째 파일을 반복하여 첫 번째 열 값이 배열에 있는지 확인합니다. 배열에 존재하는 경우 master_file 줄을 인쇄합니다.