Como usar o grep / awk / unix para combinar todas as linhas de um arquivo em outro arquivo, mesmo que sejam duplicatas

1

Estou tentando recuperar as linhas correspondentes de um arquivo, no entanto, o arquivo que possui o "índice" ou a lista de correspondências a serem recuperadas também possui entradas duplicadas e quero imprimir as duplicatas também.

Exemplo:

Arquivo 1 (arquivo de índice ou lista de strings para correspondência)

abc
tgf
abc
ggg
aaa
fff

Arquivo 2 (o que eu quero recuperar para cada uma das correspondências no arquivo 1)

Fred   1   3   abc
Amy    2   4   ggg
Dan    5   6   tgf
Mike   9   1   fff
Steve  2   1   aaa

Meu resultado desejado seria (a ordem não é importante, apenas que eu corresponda a cada linha):

Fred   1   3   abc
Dan    5   6   tgf
Fred   1   3   abc
Amy    2   4   ggg
Steve  2   1   aaa
Mike   9   1   fff

Estou familiarizado e experimentei o grep da seguinte maneira, mas ele não imprime as entradas duplicadas.

grep -Fwf file1.txt file2.txt

Fred   1   3   abc
Amy    2   4   ggg
Dan    5   6   tgf
Mike   9   1   fff
Steve  2   1   aaa
    
por jpalmer 08.03.2015 / 08:56

1 resposta

6

Via awk

awk 'NR==FNR{A[$4]=$0;next}{print A[$1]}' file2.txt file1.txt

Ou sort ed saida via join :

join -o 2.1 2.2 2.3 2.4 -2 4 <(sort file1.txt) <(sort -k4 file2.txt)
    
por 08.03.2015 / 09:05

Tags