file1
2열과 6열 사이에 일치하는 항목이 있는지 확인하는 방법을 알아내려고 합니다 file2
. 그렇다면 의 14열에 있는 해당 문자열과 함께 일치 항목을 인쇄하고 file2
다른 파일에 저장하고 싶습니다 file3
.
파일 1:
1 ENSCAFT00000037911
1 ENSCAFT00000046425
1 ENSC
1 ENSCAFT00000009252
1 ENSCAFT00000049028
1 ENSC
2 AFT00000000014
2 ENSCAFT00000042968
2 ENSCAFT000000
파일 2:
1 13336837 13358107 -1 SERPINB7 AFT00000000014 ENSCAFG00000023436 34.51 13.70 16.30 7.80 18.85 10.21 0.50
1 14028702 14130819 -1 PHLPP1 ENSCAFT00000000123 ENSCAFG00000000070 1531.81 1090.63 518.08 559.90 581.70 1126.21 0.41
1 14702158 14789303 1 PIGN ENSCAFT00000000137 ENSCAFG00000000083 979.07 882.88 296.70 272.97 369.74 877.13 0.31
1 17154193 17210961 -1 ZNF532 ENSCAFT00000049028 ENSCAFG00000000103 31.62 58.98 13.83 23.80 27.50 15.38 0.42
1 17154246 17210961 -1 NA ENSCAFT00000000164 ENSCAFG00000000103 31.62 58.98 13.83 23.80 27.50 15.38 0.42
1 17491358 17563171 1 ALPK2 ENSCAFT00000000169 ENSCAFG00000000107 12.18 10.55 39.99 31.41 210.85 15.82 3.14
1 18214832 18277601 1 ATP8B1 ENSCAFT00000000203 ENSCAFG00000000123 751.98 827.35 373.91 394.89 571.98 711.16 0.49
원하는 출력:
ENSCAFT00000049028 0.42
AFT00000000014 0.50
순서는 중요하지 않습니다.
답변1
단순한 join
:
join -1 2 -2 6 -o 1.2,2.14 <(sort -k2 file1) <(sort -k6 file2 )
-1 2
정의file1
필드 2는 연결 필드입니다.-2 6
정의file2
필드 6은 연결 필드입니다.-o 1.2,2.14
출력 형식file1
필드 2 다음에file2
필드 14가 옵니다.<(sort ...)
-k
이것이join
제대로 작동 하려면 두 파일 모두 조인 필드에서 정렬되어야 합니다 .
또는 다음을 사용하십시오 awk
(정렬된 입력이 필요하지 않음).
awk 'FNR==NR{a[$2]=$0} FNR!=NR&&a[$6]{print $6,$14}' file1 file2
FNR==NR
첫 번째 파일의 경우file1
:a[$2]=$0
a
두 번째 필드를$2
인덱스로 사용하여 배열을 채웁니다.
FNR!=NR
두 번째 파일의 경우file2
:a[$6]
$6
6번째 필드가 배열에 존재하는 경우a
.print $6,$14
두 개의 값을 인쇄합니다.