awk
подход:
awk 'BEGIN{ printf "blahblahblah" }{ printf " /something/%s", $0 }
END{ print "" }' file1.txt > file2.txt
$ 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
Вы можете просто соединить два файла, используя join (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