#join #awk #paste
Вопрос:
файл1
rs12345 G C
rs78901 A T
файл2
3 22745180 rs12345 G C,G
12 67182999 rs78901 A G,T
желаемый результат
3 22745180 rs12345 G C
12 67182999 rs78901 A T
Я пытался
awk 'NR==FNR {h[$1] = $3; next} {print $1,$2,$3,h[$2]}' file1 file2
сгенерированный результат
3 22745180 rs12345
выведите первые 4 столбца файла 2 и 3-й столбец файла 1 в качестве 5-го столбца в выводе
Ответ №1:
Вы можете использовать это awk
:
awk 'FNR == NR {map[$1,$2] = $3; next} ($3,$4) in map {$NF = map[$3,$4]} 1' f1 f2 | column -t
3 22745180 rs12345 G C
12 67182999 rs78901 A T
Более читаемая версия:
awk '
FNR == NR {
map[$1,$2] = $3
next
}
($3,$4) in map {
$NF = map[$3,$4]
}
1' file1 file2 | column -t
Используется column -t
только для табличного вывода.
Ответ №2:
В представленном вами случае (строки в обоих файлах совпадают) это сработает
paste file1 file2 | awk '{print $4,$5,$6,$7,$3}'
Комментарии:
1. ВСТАВКА не учитывает порядок строк и не связанных строк в обоих файлах
2. @rij вы не упомянули в своем вопросе, что вам нужен скрипт, который также будет соединять строки. Мой код работает, например, из вашего вопроса.