ファイルが2つあります。
ファイルA
Aacs 4498.5 778.5 995.5 1263 530
Abracl 2824 19.31 58.45 55.67 33.075
Ackr3 1294.5 19.5 47.5 38.5 4.5
Actb 246564 4472.46 11134.1 12272.6 2228.05
文書B
chr5 124350754 124353027 Aacs 1639_47_175_59_95
chr5 125140780 125141989 Aacs 920_132_115_65_389
chr5 125148638 125149481 Aacs 357_56_65_48_116
chr1 89576587 89577508 Ackr3 618_804_385_412_1239
chr1 89579859 89582071 Ackr3 1340_429_274_242_611
chr5 142819302 142820142 Actb 614_116_105_58_371
chr5 142821400 142822219 Actb 544_74_97_45_118
FileAの列1の値がFileBに存在する場合は、一致する値がFileBに複数回表示されても、FileAのすべての行の値をFileBに追加する必要があります。
だからそれ以来斧FileAがFileBに存在する場合は、すべての対応する値を次のようにFileBに複数回追加したいと思います。
chr5 124350754 124353027 Aacs 1639_47_175_59_95 4498.5 778.5 995.5 1263 530
chr5 125140780 125141989 Aacs 920_132_115_65_389 4498.5 778.5 995.5 1263 530
chr5 125148638 125149481 Aacs 357_56_65_48_116 4498.5 778.5 995.5 1263 530
Pythonではpandasを使ってこれを行うことができますが、awkや他のunixツールキットを使ってこれを行う方法を見つけたいと思います。
答え1
$ awk 'NR==FNR{key=$1; sub(/[^[:space:]]+/,""); a[key]=$0; next} {print $0 a[$4]}' FileA FileB
chr5 124350754 124353027 Aacs 1639_47_175_59_95 4498.5 778.5 995.5 1263 530
chr5 125140780 125141989 Aacs 920_132_115_65_389 4498.5 778.5 995.5 1263 530
chr5 125148638 125149481 Aacs 357_56_65_48_116 4498.5 778.5 995.5 1263 530
chr1 89576587 89577508 Ackr3 618_804_385_412_1239 1294.5 19.5 47.5 38.5 4.5
chr1 89579859 89582071 Ackr3 1340_429_274_242_611 1294.5 19.5 47.5 38.5 4.5
chr5 142819302 142820142 Actb 614_116_105_58_371 246564 4472.46 11134.1 12272.6 2228.05
chr5 142821400 142822219 Actb 544_74_97_45_118 246564 4472.46 11134.1 12272.6 2228.05
出力のフィールドをソートしたい場合は、さまざまなオプションがあり、最も簡単な方法は次にパイプすることですcolumn
。
$ awk 'NR==FNR{key=$1; sub(/[^[:space:]]+/,""); a[key]=$0; next} {print $0 a[$4]}' FileA FileB | column -t
chr5 124350754 124353027 Aacs 1639_47_175_59_95 4498.5 778.5 995.5 1263 530
chr5 125140780 125141989 Aacs 920_132_115_65_389 4498.5 778.5 995.5 1263 530
chr5 125148638 125149481 Aacs 357_56_65_48_116 4498.5 778.5 995.5 1263 530
chr1 89576587 89577508 Ackr3 618_804_385_412_1239 1294.5 19.5 47.5 38.5 4.5
chr1 89579859 89582071 Ackr3 1340_429_274_242_611 1294.5 19.5 47.5 38.5 4.5
chr5 142819302 142820142 Actb 614_116_105_58_371 246564 4472.46 11134.1 12272.6 2228.05
chr5 142821400 142822219 Actb 544_74_97_45_118 246564 4472.46 11134.1 12272.6 2228.05
答え2
以下を使用して、2つのファイルを簡単にリンクできます。参加(1)
join -1 1 -2 4 -o 2.1,2.2,2.3,2.4,2.5,1.2,1.3,1.4,1.5,1.6 FileA FileB
任意の列を指定します。-1そして-2ファイル1(FileA)と2(FileB)を結合しようとしています。これ- モールド出力例に合わせて。出力をきれいな列として表示するには、出力を次にパイプします。column -t