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