5つの列を使用してファイルのサブセットを抽出する

5つの列を使用してファイルのサブセットを抽出する

2つのファイルがあります。 1つはbiiiiiigファイル(249430行)で、もう1つは最初のファイル(500行)より小さいです。

最初のファイルには、この5つの列と他の列(2番目のファイルの最初の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 .........

2番目のファイルには5つの列があります。たとえば、次のようになります。

#CHROM     POS         ID          REF      ALT
chr2       32424454        rs4576493      T       G
chr8       35578788        rs3686678      C       CCG

2番目のファイルの5番目の列を最初のファイルと比較してから、ファイル間の交差行のみを保存したいのですが(ファイル1のすべての列を含む)。

だから私が望む最終ファイルは次のようになります

#CHROM     POS         ID          REF      ALT     QUAL    INFO 
chr2       32424454        rs4576493      T       G       pass    ......
chr8       35578788        rs3686678      C       CCG      pass .........

Unixでは何をすべきですか?ありがとう

ベストアンサー1

awkを使用してください。

awk '
    { key = $1 FS $2 FS $3 FS $4 FS $5 }
    NR==FNR { a[key]; next }
    key in a
' file2 file1

おすすめ記事