ファイルから 2 番目のファイルと一致する行を抽出し、1 つのファイルにマージします。

ファイルから 2 番目のファイルと一致する行を抽出し、1 つのファイルにマージします。

いくつかの場所を含むファイルがあります。

head positions
142541687
142541814
142541910
142542976
142544533
142546366
142548674
142560386

1800個のファイルを含む別のフォルダがあり、各ファイルは1人(合計1800人)に属します。 2列は場所、4列は個人IDです。

 head NA20507.mapped.ILLUMINA.bwa.TSI.low_coverage.20130415.bam_dp
1   142541687   78 NA20507
1   142535975   79 NA20507
1   142535976   79 NA20507
1   142535977   77 NA20507
1   142535978   78 NA20507
1   142535979   77 NA20507

または他の人の例として、

head NA20901.mapped.ILLUMINA.bwa.GIH.low_coverage.20120522.bam_dp
1   142541687   135 NA20901
1   142535975   135 NA20901
1   142535976   137 NA20901
1   142535977   138 NA20901
1   142535978   138 NA20901
1   142535979   136 NA20901
1   142535980   135 NA20901

個々のファイルごとに場所ファイルの場所を含む行だけを維持したいのですが(個々のファイルの2番目の列は場所ファイルと一致します)、各場所ごとに個別に保存したいと思います!

   cat NA20507.mapped.ILLUMINA.bwa.TSI.low_coverage.20130415.bam_dp_match142541687
        1   142541687   78 NA20507

最後に、すべての個人に対してこのファイルをマージしたいです(例:場所142541687)。

head desired_pos142541687
1   142541687   78  NA20507
1   142541687   135 NA20901

または位置142542976。

desired_pos142542976

    1   142535976   79 NA20507
    1   142535976   137 NA20901

答え1

これは、すでに接している同様の質問に対する答えとほぼ同じです。まず、1つのファイル(場所)を読み取り、別のファイルを解析してデータを抽出します。

awk 'NR == FNR { pos[$1]=1; next } $2 in pos { f="desired_pos" $2; print >>f; close(f) }' positions NA*.bam_dp

質問に 2 つの個別のファイルが与えられ、positions142535975 が含まれている場合、desired_pos142535975次のファイルが生成されます。

1   142535975   79 NA20507
1   142535975   135 NA20901

すべての位置が染色体1(または少なくとも同じこれは、染色体(個々のファイルと同じ)、ファイル内の場所以外に染色体名情報がないためですpositions

関連情報