Compare dois arquivos por linhas correspondentes e armazene resultados positivos [duplicados]

7

Eu tenho dois arquivos.

Arquivo 1:

A0001  C001
B0003  C896
A0024  C234
.
B1542  C231
.
upto 28412 such lines

Arquivo 2:

A0001
A0024
B1542
.
.
and 12000 such lines.

Eu quero comparar o Arquivo 2 com o Arquivo 1 e armazenar as linhas correspondentes do Arquivo 1. Eu testei o Perl e o Bash, mas nenhum parece estar funcionando.

A última coisa que tentei foi algo assim:

for (@q) # after storing contents of second file in an array
{
        $line ='cat File1 | grep $_'; #directly calling File 1 from bash
        print $line;
}

mas falha.

    
por user3543389 17.04.2014 / 04:54

3 respostas

7

Você pode usar awk :

$ awk 'FNR==NR{a[$1];next}($1 in a){print}' file2 file1
A0001   C001
A0024   C234
B1542   C231
    
por 17.04.2014 / 05:11
12

Isso deve fazer o trabalho:

grep -Ff File2 File1

O -f File2 lê os padrões de File2 e o -F trata os padrões como sequências fixas (ou seja, nenhuma expressão regular usada).

    
por 17.04.2014 / 05:07
2

Parece-me que os dois arquivos já estão classificados no primeiro campo. Em caso afirmativo:

join file1 file2

é o melhor, até onde seus arquivos são grandes.

    
por 17.04.2014 / 08:42