Que tal
awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2
Eu tenho file1 e file2 da seguinte forma. Gostaria de primeiro encontrar correspondências entre dois arquivos com base na primeira coluna e, em seguida, imprimir as linhas correspondentes de file1 e file2 . Eu escrevi o resultado desejado abaixo
$ cat file1
1, 456, abcd, ...
23, 567, rstc, ...
45, 678, rsto, ...
$ cat file2
23, 5607, abcstc, ...
45, 28, zfgsto, ...
Saída desejada:
23, 567, rstc, ...
23, 5607, abcstc, ...
45, 678, rsto, ...
45, 28, zfgsto, ...
Que tal
awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2
Talvez seja possível usar uniq para criar o conjunto de linhas que você deseja:
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
Passo a passo:
Crie um conjunto de prefixos usando uniq (pula a primeira linha de cada arquivo usando tail ):
for pref in $(tail -q -n +2 *.txt | cut -d',' -f 1 | sort | uniq)
Para cada prefixo encontrado, grep ambos os arquivos para as linhas que iniciam com ele, e remova o relatório grep "arquivo correspondido" usando cut :
do grep ^${pref}"," *.txt | cut -d':' -f 2 >> test.res; done