Я знаю, что этот вопрос задавался несколько раз раньше. Вот один пример:
Использование AWK для объединения двух файлов на основе нескольких столбцов
Моя цель - распечатать столбцы 2, 4, 5 и 7 файла file_b и столбцы 17 и 18 файла file_a, если будет найдено следующее совпадение:
Столбцы 2, 6 и 7 файла file_a.csv соответствуют столбцам 2, 4 и 5 файла file_b.csv соответственно.
Но как бы я ни старался, я не могу заставить его работать в моем случае. Вот мои два файла:
file_a.csv
col2, col6, col7, col17, col18
a, b, c, 145, 88
e, f, g, 101, 96
x, y, z, 243, 222
file_b.csv
col2, col4, col5, col7
a, b, c, 4.5
e, f, g, 6.3
x, k, l, 12.9
Вывод должен выглядеть так:
col2, col4, col5, col7, col17, col18
a, b, c, 4.5, 145, 88
e, f, g, 6.3, 101, 96
Я пробовал это:
awk -F, -v RS='\r\n' 'NR==FNR{key[$2 FS $6 FS $7]=$17 FS $18;next} {if($2 FS $4 FS $5 in key); print $2 FS $4 FS $5 FS $7 FS key[$2 FS $6 FS $7]}' file_a.csv file_b.csv > out.csv
В настоящее время я получаю вывод:
col2, col4, col5, col7,
a, b, c, 4.5,
e, f, g, 6.3,
Другими словами, col17 и col18 из file_a не отображаются.
Вчера я задал связанный вопрос, где у меня были проблемы с переносами строк. На этот вопрос ответили и решили, но теперь я думаю, что эта проблема связана с проверкой условия if.
Обновление:
Я делюсь ссылками на усеченные копии фактических данных. Единственная разница между этими файлами и реальными состоит в том, что у настоящих есть миллионы строк. У этих есть только 10 каждый.
file_a.csv
file_b.csv