Слияние файлов на основе совпадения первого столбца

mount --bind ваш / home в / etc / fstab с

/mnt/g/common/home /home none bind 0 0

( См. этот вопрос на ServerFault.)

Я понятия не имею, насколько практично иметь / home в файловой системе NTFS.

1
14.03.2016, 03:23
2 ответа

Для вашей команды awk не хватает только проверки, был ли ключ из файла1 виден в файле2

awk 'FNR==NR{a[$1]=$2 FS $3;next} $1 in a {print $0, a[$1]}' file2 file1 > output
# ................................^^^^^^^
1
27.01.2020, 23:35

Использование данных вашего примера:

$ join <(sort file1) <(sort file2)
ARS-BFGL-BAC-10975 0.9303 688423261 1 01/04/2015 0.9983763305 10 21225382
ARS-BFGL-BAC-10975 0.9303 688423263 1 01/04/2015 0.9983763305 10 21225382
ARS-BFGL-BAC-11025 0.9092 688423261 1 01/04/2015 0.9983763305 10 84516867
ARS-BFGL-BAC-11025 0.9092 688423263 1 01/04/2015 0.9983763305 10 84516867
ARS-BFGL-BAC-11193 0.9544 688423261 1 01/04/2015 0.9983763305 1 29303546
ARS-BFGL-BAC-11193 0.9544 688423263 1 01/04/2015 0.9983763305 1 29303546

Похоже, это делает то, что вы от него хотите, за исключением порядка строк в выводе (, который отсортирован здесь, и я не знаю, важно ли это для вас. или нет ).

Поле соединения по умолчанию является первым полем, поэтому -j 1не требуется (это расширение GNU join).

Выход по умолчаниюjoin:«Каждый строка вывода состоит из поля соединения, остальные поля из файла1 а затем оставшиеся поля из файла2" (из руководства OpenBSD ). Это означает, что спецификация поля вывода, которую вы использовали, также не нужна, поскольку она соответствует поведению по умолчанию.

Для sort-k1также эквивалентно значению по умолчанию.

Я не знаю, что вызвало сообщение об ошибке, кроме случайного использования sort -c.

2
27.01.2020, 23:35

Теги

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