grep para valores repetidos da lista de padrões

4

Eu tenho o arquivo A.txt, que é uma lista de ids exclusivos (coluna 1) e seus valores correspondentes (coluna 2):

A.txt

ABC1D_T1_B1  123.4
ABC2D_T1_B2  146.7
ABC3D_T1_B1  567.8
ABC4D_T0_B2  96.8
ABC1D_T0_B1  145.9

O segundo arquivo é B.txt, não é único, mas tem entradas duplicadas

ABC1D_T1_B1
ABC1D_T1_B1
ABC2D_T1_B2
ABC3D_T1_B1
ABC3D_T1_B1
ABC4D_T0_B2
ABC1D_T0_B1
ABC1D_T0_B1

Como posso grep B.txt de A.txt e relatar os valores de col 2 para a lista repetida

Resultado:

ABC1D_T1_B1  123.4
ABC1D_T1_B1  123.4
ABC2D_T1_B2  146.7
ABC3D_T1_B1  567.8
ABC3D_T1_B1  567.8
ABC4D_T0_B2  96.8
ABC1D_T0_B1  145.9
ABC1D_T0_B1  145.9
ABC1D_T0_B1  145.9

Normalmente, se houver entradas exclusivas em B.txt,

grep -Fw -f B.txt A.txt >Result.txt

Como posso fazer isso para várias entradas de repetição usando o grep?

    
por Roli 05.12.2014 / 13:02

2 respostas

3

Como você também marcou awk :

awk 'FNR == NR {a[$1] = $0; next}; {print a[$1]}' A.txt B.txt

Não acho que um único grep possa fazer isso, mas uma combinação de xargs e grep :

xargs -I{} grep -Fw -- {} A.txt < B.txt
    
por 05.12.2014 / 13:14
5

Você poderia fazer isso usando um simples join :

join A.txt B.txt

Mas, para funcionar, ambos os arquivos devem ser classificados na chave de junção (aqui o primeiro campo (em branco)). Para fazer isso, use apenas sort -b filename .

    
por 05.12.2014 / 13:23

Tags