두 개의 탭으로 구분된 파일인 파일 A와 파일 B가 있고 파일 A의 처음 두 열을 파일 B의 처음 두 열과 비교하고 항목이 아닌 경우 파일 B의 값을 출력에 인쇄해야 합니다. 가능 인쇄는 해당되지 않습니다. 다음은 내 것입니다
fileA.txt
id freq.var
chr12_56487682_56487682_T_A 0
chr3_52436344_52436344_C_G 0
chr19_9091288_9091288_G_T 0
chr12_44172075_44172075_A_C 0.05739626
chr19_9048431_9048431_A_G 0.033832938
chr12_56487678_56487678_T_G 0
chr17_37881646_37881646_T_G 0
chr19_9002576_9002576_T_C 0.0342902
chr15_63991054_63991054_T_G 0.024456501
chr17_29554589_29554589_C_T 0.095445774
fileB.txt
id freq.var
chr12_56487682_56487682_T_A 0.0035266
chr19_9048431_9048431_A_G 0.033832938
chr3_52436344_52436344_C_G 0.002500443
chr12_44172075_44172075_A_C 0.05739626
chr19_9002576_9002576_T_C 0.0342902
chr17_29554589_29554589_C_T 0.095445774
chr15_63991054_63991054_T_G 0.024456501
다음은 예상되는 결과입니다
id freq.var
chr12_56487682_56487682_T_A 0.0035266
chr3_52436344_52436344_C_G 0.002500443
chr19_9091288_9091288_G_T NA
chr12_44172075_44172075_A_C 0.05739626
chr19_9048431_9048431_A_G 0.033832938
chr12_56487678_56487678_T_G NA
chr17_37881646_37881646_T_G NA
chr19_9002576_9002576_T_C 0.0342902
chr15_63991054_63991054_T_G 0.024456501
chr17_29554589_29554589_C_T 0.095445774
이전에도 비슷한 질문을 게시한 적이 있습니다.두 파일의 첫 번째 열을 기준으로 두 개의 탭으로 구분된 파일을 비교하고 출력 파일에 일치하는 항목과 일치하지 않는 항목을 인쇄합니다.
답변1
이는 두 파일을 구문 분석하는 표준 사용법입니다 awk
. 첫 번째 파일의 작업은 조건 다음에 이루어지며 FNR==NR
값을 해시 배열에 저장합니다. 이 next
명령문은 후속 작업을 수행하지 않고 다음 줄로 이동하는 것을 의미합니다. 두 번째 파일의 경우 다음 부분을 수행합니다. 삼항을 사용하여 저장된 값이 있으면 가져오거나 "NA"로 설정합니다. 1
혼자는 print
. column
공백이 포함된 탭 모양을 얻으 려면 파이프를 사용하세요 .
awk 'NR==FNR{a[$1]=$2; next} {$2=($1 in a)? a[$1]: "NA"} 1' fileB.txt fileA.txt \
| column -t
산출:
id freq.var
chr12_56487682_56487682_T_A 0.0035266
chr3_52436344_52436344_C_G 0.002500443
chr19_9091288_9091288_G_T NA
chr12_44172075_44172075_A_C 0.05739626
chr19_9048431_9048431_A_G 0.033832938
chr12_56487678_56487678_T_G NA
chr17_37881646_37881646_T_G NA
chr19_9002576_9002576_T_C 0.0342902
chr15_63991054_63991054_T_G 0.024456501
chr17_29554589_29554589_C_T 0.095445774