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
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?
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
.