2017-02-02 6 views
0

У меня есть два файла с разделителями csv/double quote. Колонка 26 в файле 1 и 2 в столбце 2 файла оба содержат домены, и если я бегу следующийКак слить 2 файла, если другой столбец в каждом файле соответствует, и оба файла находятся в формате csv/double quote отделены друг от друга?

awk -F'"' '{print $26}' file1.csv 
awk -F'"' '{print $2}' file2.txt 

Затем можно видеть, что файл 1 имеет 6 доменов и файл 2 имеет 3 домены.

Все домены в файле 2 также в файле 1.

Я хотел бы создать новый файл, содержащий все столбцов в файле 1 плюс все столбцы в файле 2, если столбец 2 в файле 2 соответствует столбцу 26 в файле 1.

Кроме того, я уверен, что столбец 26 всегда является последним столбцом в файле 1, но файл 2 может иметь любое количество столбцов.

Кто-нибудь знает, как я могу это сделать в bash, awk, sed или аналогичном?

ответ

0

@Bruce: Попытка:

awk -F'"' 'FNR==NR{A[$26]=$0;next} ($2 in A){print A[$2] FS $0}' file1 file2 

Так вот я проверяю FNR == NR условие, которое будет истинным только тогда, когда первый file1 файл читается, а затем создает массив с именем индекс которого составляет $ 26 поле и установив его значение в текущую строку, а следующее будет пропускать все дальнейшие утверждения. Затем проверка $ 2 файла2 присутствует в массиве A файла1, а затем печатается значение массива A с текущим значением строки.

Просьба предоставить образец Input_file и ожидаемый результат в случае, указанном выше, не соответствует вашим требованиям.

+0

Отлично, спасибо большое! Я понял, что мне нужно убирать некоторые из файлов csv на входные файлы, но это делает трюк! – Bruce

+0

Рад, что это вам помогло :) – RavinderSingh13