Я имею file1 и file2 следующим образом. Я хотел бы сначала найти совпадения между двумя файлами на основе первого столбца, а затем распечатать соответствующие строки из 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, ...
Возможно, используя 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: [ ! d4]
do grep ^${pref}"," *.txt | cut -d':' -f 2 >> test.res; done