Como imprimir as duas linhas correspondentes de dois arquivos diferentes? [duplicado]

1

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,  ...
    
por Trupti 29.01.2015 / 16:53

2 respostas

2

Que tal

awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2
    
por steeldriver 29.01.2015 / 17:06
0

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
    
por Reut Sharabani 29.01.2015 / 17:24