2개의 파일이 있습니다. 하나는 biiiiig 파일(249430줄)이고 다른 하나는 첫 번째 파일(500줄)보다 작습니다.
첫 번째 파일에는 이 5개의 열과 다른 열(두 번째 파일의 처음 5개 열과 동일)이 있습니다.
#CHROM POS ID REF ALT QUAL INFO
chr2 32424454 rs4576493 T G pass ......
chr8 35578788 rs3686678 C A pass .........
chr8 35578788 rs3686678 C CCG pass .........
chrx 35578788 rs3686678 C CCG pass .........
두 번째 파일에는 5개의 열이 있습니다. 예를 들면 다음과 같습니다.
#CHROM POS ID REF ALT
chr2 32424454 rs4576493 T G
chr8 35578788 rs3686678 C CCG
두 번째 파일의 다섯 번째 열을 첫 번째 파일과 비교한 다음 파일 사이의 교차 행만 저장하고 싶습니다(그러나 파일 1의 모든 열은 포함).
그래서 제가 원하는 최종 파일은 다음과 같습니다
#CHROM POS ID REF ALT QUAL INFO
chr2 32424454 rs4576493 T G pass ......
chr8 35578788 rs3686678 C CCG pass .........
유닉스에서는 무엇을 해야 합니까? 감사해요
답변1
awk를 사용하십시오.
awk '
{ key = $1 FS $2 FS $3 FS $4 FS $5 }
NR==FNR { a[key]; next }
key in a
' file2 file1
답변2
두 파일이 모두 TSV 파일, 즉 탭으로 구분된 파일이라고 가정하면 다음을 사용할 수 있습니다.밀러( mlr
; 구조화된 데이터 작업을 위해 특별히 개발된 도구)는 언급한 5개 필드를 사용하여 두 데이터 세트 간의 관계형 INNER JOIN 작업을 수행합니다.
$ mlr --tsv join -f firstfile -j '#CHROM,POS,ID,REF,ALT' secondfile
#CHROM POS ID REF ALT QUAL INFO
chr2 32424454 rs4576493 T G pass ......
chr8 35578788 rs3686678 C CCG pass .........
데이터가 단일 탭 대신 여러 공백을 사용하는 경우 입력과 출력이 모두 "예쁘게 인쇄"되기를 원함을 나타내기 --pprint
위해 대신 사용하십시오. (또는 및 )를 --tsv
사용하여 입력을 "예쁜 인쇄" 형식으로 읽고 출력을 TSV로 씁니다.--p2t
--ipprint
--otsv