他のファイルと一致する行を見つけて別のファイルに保存する

他のファイルと一致する行を見つけて別のファイルに保存する

私の人口プロフィールは次のとおりです

pop.file
HG1W
HG2W
HG3W
HG4W
...

別のファイルには、個人ID(各個人ごとに2行、R1およびR2)が含まれています。

ind.file
HI.2613.007.Index_18.ED17_HG1W26-7_353_R1.fastq.gz
HI.2613.007.Index_18.ED17_HG1W26-7_353_R2.fastq.gz
HI.2613.007.Index_14.ED14_HG1W35-2_310_R1.fastq.gz
HI.2613.007.Index_14.ED14_HG1W35-2_310_R2.fastq.gz
HI.2622.001.Index_16.ED16_HG2W9-3_342_R1.fastq.gz
HI.2622.001.Index_16.ED16_HG2W9-3_342_R2.fastq.gz
HI.2613.007.Index_1.ED1_HG2W12-3_33_R1.fastq.gz
HI.2613.007.Index_1.ED1_HG2W12-3_33_R2.fastq.gz
...

各母集団の個人を別々のファイルに保存し、次の出力ファイルを取得したいと思います。

head HG1.population
HI.2613.007.Index_18.ED17_HG1W26-7_353_R1.fastq.gz
HI.2613.007.Index_18.ED17_HG1W26-7_353_R2.fastq.gz
HI.2613.007.Index_14.ED14_HG1W35-2_310_R1.fastq.gz
HI.2613.007.Index_14.ED14_HG1W35-2_310_R2.fastq.gz


head HG2.population
HI.2622.001.Index_16.ED16_HG2W9-3_342_R1.fastq.gz
HI.2622.001.Index_16.ED16_HG2W9-3_342_R2.fastq.gz
HI.2613.007.Index_1.ED1_HG2W12-3_33_R1.fastq.gz
HI.2613.007.Index_1.ED1_HG2W12-3_33_R2.fastq.gz

答え1

そしてawk

awk -F_ '
  NR==FNR {ind[substr($1,1,3)]++} 
  {i = substr($3,1,3); f = i ".population"} 
  i in ind {print >> f; close(f)}
' pop.file ind.file

それから

$ head HG*
==> HG1.population <==
HI.2613.007.Index_18.ED17_HG1W26-7_353_R1.fastq.gz
HI.2613.007.Index_18.ED17_HG1W26-7_353_R2.fastq.gz
HI.2613.007.Index_14.ED14_HG1W35-2_310_R1.fastq.gz
HI.2613.007.Index_14.ED14_HG1W35-2_310_R2.fastq.gz

==> HG2.population <==
HI.2622.001.Index_16.ED16_HG2W9-3_342_R1.fastq.gz
HI.2622.001.Index_16.ED16_HG2W9-3_342_R2.fastq.gz
HI.2613.007.Index_1.ED1_HG2W12-3_33_R1.fastq.gz
HI.2613.007.Index_1.ED1_HG2W12-3_33_R2.fastq.gz

答え2

この試み、

for i in `cat pop.file | cut -c -3`
do
    grep $i ind.file > $i.population
done

関連情報