Как напечатать обе совпадающие строки из двух разных файлов? [дубликат]

У меня есть файл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,  ...
1
задан 29 January 2015 в 09:03

2 ответа

Как насчет

awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2
2
ответ дан 7 December 2019 в 14:02

Возможно, с помощью 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
0
ответ дан 10 November 2019 в 10:57

Другие вопросы по тегам:

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