Você pode usar awk
:
$ awk 'FNR==NR{a[$1];next}($1 in a){print}' file2 file1
A0001 C001
A0024 C234
B1542 C231
Eu tenho dois arquivos.
A0001 C001
B0003 C896
A0024 C234
.
B1542 C231
.
upto 28412 such lines
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.
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).
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.
Tags bash files file-comparison