Compare um arquivo com uma coluna de outro arquivo

5

Eu tenho um arquivo File1 com dados como

aaa
bbb

E outro arquivo File2 com dados como:

2,aaa,234
w,bbb,589
4,ccc,675

Eu preciso comparar os dados de File1 com os dados da coluna 2 de File2 e imprimir a correspondência em um único arquivo e o não-casamento em outro.

    
por vmadhav 10.03.2016 / 07:16

3 respostas

3

awk -F '
  !b{a[$0]; next}
  $2 in a {print > "matching.txt"; next}
  {print > "non-matching.txt"}' file1 b=1 file2

Ou com dois passes e assumindo que os arquivos estão classificados na chave de associação:

join -t , -2 2 -o 2.1,2.2,2.3 file1 file2 > matching.txt
join -t , -2 2 -v 2 -o 2.1,2.2,2.3 file1 file2 > non_matching.txt
    
por 10.03.2016 / 07:49
1

Este one-liner usa cut para escolher o campo correto e grep para encontrar correspondências. As correspondências e as não correspondências são anexadas aos arquivos denominados Matching e NonMatching , respectivamente.

for x in $(cut -d, -f2 File2); do grep -q "$x" File1 && echo "$x" >> Matching || echo "$x" >> NonMatching; done

    
por 10.03.2016 / 10:58
0

Aqui está o comando para correspondência de registros -

awk -F, 'FNR==NR{f1[$1]=$0;next}$2  in f1{print $0}' OFS="," file1 file2 > matchedRecords.txt
    
por 26.07.2016 / 22:52