У меня есть файл1
и файл2
, как показано ниже. Я хотел бы сначала найти совпадения между двумя файлами на основе первого столбца, а затем распечатать совпадающие строки из file1
и file2
. Я написал желаемый результат ниже
$ cat file1
1, 456, abcd, ...
23, 567, rstc, ...
45, 678, rsto, ...
$ cat file2
23, 5607, abcstc, ...
45, 28, zfgsto, ...
Желаемый результат:
23, 567, rstc, ...
23, 5607, abcstc, ...
45, 678, rsto, ...
45, 28, zfgsto, ...
Как насчет
awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2
Возможно, с помощью uniq
для первого создания набора строк Вы хотите:
for pref in $(tail -q -n +2 *.txt | cut -d',' -f 1 | sort | uniq); do grep ^${pref}"," *.txt | cut -d':' -f 2 >> test.res; done
Пошаговая демонстрация:
Создают набор префиксов с помощью uniq
(пропускает первую строку каждого файла с помощью tail
):
for pref in $(tail -q -n +2 *.txt | cut -d',' -f 1 | sort | uniq)
Для каждого найденного префикса, grep
оба файла для строк, запускающихся с него, и, удаляют grep
"файл, подобранный" отчет с помощью cut
:
do grep ^${pref}"," *.txt | cut -d':' -f 2 >> test.res; done