Добавить все значения строки из файла1 в файл2, если значение столбца в файле1 существует в файле2

awk подход:

awk 'BEGIN{ printf "blahblahblah" }{ printf " /something/%s", $0 }
     END{ print "" }' file1.txt > file2.txt
2
08.02.2020, 22:51
2 ответа
$ 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
28.04.2021, 23:24

Вы можете просто соединить два файла, используя 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

2
28.04.2021, 23:24

Теги

Похожие вопросы