Compare dois arquivos e imprima os campos comuns e seus números de linha correspondentes no primeiro arquivo

2

Eu tenho alguns dados brutos em um arquivo, digamos File1.txt

Colt McCoy QB CLE  135 222 1576    6   9   60.8%   74.51  
Josh Freeman QB TB 291 474 3451    25  6   61.4%   95.9  
Matt Cassel QB KC  262 450 3116    27  7   58.2%   93.0  
Michael Vick QB PHI    233 372 3018    21  6   62.6%   100.2  
Matt Schaub QB HOU 365 574 4370    24  12  63.6%   92.0  

Arquivo 2.txt tem uma lista de nomes, um nome por linha

Josh  
Matt  

Eu quero obter a saída como Nome e número da linha. Para o exemplo acima, seria:

Josh: 2  
Matt: 3,5  

Eu tenho um comando que me dá a lista de nomes e os números de linha, mas quero imprimi-lo no formato desejado acima. Meu comando atual é

awk '{print $1, NR}' file1.txt | grep -f file2.txt

Mostra

Josh 2
Matt 3
Matt 5

O que posso fazer para imprimir como o formato desejado?

    
por Raj Kiran 13.03.2017 / 19:16

2 respostas

1

awk sozinho pode fazer isso:

awk 'NR==FNR{seen[$1]=seen[$1]","NR; next};
{if ($1 in seen){printf("%s: %s\n", $1, substr(seen[$1], 2))}}' file2 file1
    
por 13.03.2017 / 19:47
0

Você pode usar diff -y file1 file2 .

Ele fornecerá uma saída lado a lado dos dois arquivos. Ele também tem outras opções para analisar sua saída. Revise a página de manual para obter mais opções .

    
por 13.03.2017 / 19:19