Ошибка в 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 файлов с использованием совпадения полей
  • Объединение двух файлов, соответствующих двум столбцам с несоответствиями и в каждой соответствующей строке, замените второй столбец из файла 1 на 6-й столбец в файле 2
  • Присоединить (большие) файлы по алфавитно-цифровому шаблону
  • Вставить несколько файлов на основе первого столбца в один файл
  • Присоединиться: два файла - но только добавить последние два столбца
  • Присоедините два файла на основе столбца
  • Объединение двух таблиц, включая многократное появление идентификаторов столбцов
  • как pdfjoin пейзаж и портретные изображения JPEG в один файл PDF?
  • 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 
    Linux и Unix - лучшая ОС в мире.