Объединить два файла одним столбцом - awk - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два разных скрипта для объединения файлов в один соответствующий столбец.

file1.tsv - 4 столбца, разделенных табуляцией

1 LAK c.66H>T    p.Ros49Kos
2 OLD c.11A+1>R  p.Ill1639Los
3 SRP c.96V-T>X  p.Zub%D23
4 HRP c.1S>T     p.Lou33aa

file2.tsv - 14 столбцов, разделенных табуляцией

LAK "empty_column" c.66H>T  ......
SRP "empty_column" c.96-T>X ......

Ouptut.tsv - все столбцы из file2.tsv и за 1-м столбцом file1, если совпадают.

LAK "empty_column" c.66H>T  ......1
SRP "empty_column" c.96-T>X ......3

Я использую эти два сценария, но не работает:

awk -v FILE_A="file1.tsv" -v OFS="\t" 'BEGIN { while ( ( getline <
FILE_A ) > 0 ) { VAL = $0 ; sub( /^[^ ]+ /, "", VAL ) ; DICT[ $3 ] =
VAL } } { print $0, DICT[ $3 ] }' file2.tsv

или

awk 'NR==FNR{h[$3] = $1; next} {print h[$3]}' file1.tsv file2.tsv

Спасибо за помощь.

1 Ответ

0 голосов
/ 28 августа 2018

Возможно, вы захотите использовать команду join, чтобы объединить столбец 2 первого файла со столбцом 1 второго:

join --nocheck-order -1 2 -2 1 file1.tsv file2.tsv

Несколько заметок

  • Это первый шаг, после этого у вас все еще есть задача вырезать ненужные столбцы или переставить их. Я предлагаю заглянуть в команду cut или использовать awk на этот раз.
  • Команда присоединения ожидает, что текст в обоих файлах будет в одинаковом порядке (в алфавитном порядке или иным образом)
  • Либо импортируйте их во временную базу данных sqlite3 и выполните соединение там.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...