Ошибка в awk для файлов слияния

У меня два файла:

File1

212 21 24.8 13.8354303 15.2841303 258 21 22.2 15.8507278 17.2994278 270 21 27.8 13.0482192 14.4969192 204 21 22.4 13.9465939 15.3952939 248 21 16.6 9.2714745 11.6494745 279 21 22.8 12.9151566 15.2931566 

File2

 212 21 24.8 1.03 2.8954 258 21 22.2 1.03 2.8954 270 21 27.8 1.05 2.9154 204 21 22.4 1.21 3.0754 248 21 16.6 1.29 3.1554 279 21 22.8 1.47 3.3354 

и я должен присоединиться к этому так:

 212 21 24.8 13.8354303 15.2841303 1.03 2.8954 258 21 22.2 15.8507278 17.2994278 1.03 2.8954 270 21 27.8 13.0482192 14.4969192 1.05 2.9154 204 21 22.4 13.9465939 15.3952939 1.21 3.0754 248 21 16.6 9.2714745 11.6494745 1.29 3.1554 279 21 22.8 12.9151566 15.2931566 1.47 3.3354 

но я использовал эту команду awk :

 awk 'NR==FNR{a[$1]=$4 FS $5;next}$1 in a{print $1,$2,$3,$4,$5,a[$1]}' File2 File1 > output 

и я получил этот файл:

вывод

 212 21 24.8 13.8354303 15.2841303 1.03 2.8954 258 21 22.2 15.8507278 17.2994278 1.03 2.8954 270 21 27.8 13.0482192 14.4969192 1.05 2.9154 204 21 22.4 13.9465939 15.3952939 1.21 3.0754 248 21 16.6 9.2714745 11.6494745 1.29 3.1554 279 21 22.8 12.9151566 15.2931566 1.47 3.3354 

Я новичок, и я не знаю, что я сделал не так, есть ли у кого-нибудь предложение? Заметка, мои файлы имеют около 400 строк. Большое спасибо!

2 Solutions collect form web for “Ошибка в awk для файлов слияния”

Предполагая, что данные отсортированы, для типа ситуации я бы использовал команду join

 join -o 1.1 1.2 1.3 1.4 1.5 2.4 2.5 file1.txt file2.txt 212 21 24.8 13.8354303 15.2841303 1.03 2.8954 258 21 22.2 15.8507278 17.2994278 1.03 2.8954 270 21 27.8 13.0482192 14.4969192 1.05 2.9154 204 21 22.4 13.9465939 15.3952939 1.21 3.0754 248 21 16.6 9.2714745 11.6494745 1.29 3.1554 279 21 22.8 12.9151566 15.2931566 1.47 3.3354 

Вы используете -o для установки формата в стиле xy где x – это файл, а y – это поле.

Обратите внимание, что для правильного результата соединения файлы file1 и file2 должны быть предварительно отсортированы по первому полю.
Если нет случая, и вы хотите сохранить заказ

 awk ' FNR==NR{a[$1]=$4 OFS $5; next} $1 in a{print $0, a[$1]} ' OFS='\t' file2 file1 
  • Присоедините два файла на основе столбца
  • Как узнать общие элементы между двумя файлами?
  • используя команду awk, чтобы сравнить два файла и распечатать все столбцы, а затем отобразить как NA
  • Поиск совпадений между двумя столбцами разных файлов и печать его в другом столбце
  • присоединить несколько строк на основе столбца1
  • Объединить строки с совпадающим первым столбцом
  • Как присоединиться к двум файлам, сопоставляя столбцы с неправильным количеством столбцов?
  • Сценарий оболочки для объединения двух файлов
  • слияние файлов и получение значений столбцов на основе поля id
  • Удаление строк с одним общим полем
  • Как сортировать и присоединяться в соответствии с номером / счетчиком внутри файла?
  • Слияние столбцов двух файлов в порядке
  • Linux и Unix - лучшая ОС в мире.