awk - comparando 2 colunas de 2 arquivos e imprimindo linhas comuns

0

Sei que existem as mesmas perguntas já respondidas nesta plataforma, mas tentei todas as soluções durante várias horas e não consigo encontrar o meu erro. Então, eu apreciaria qualquer sugestão ou ajuda para o que estou fazendo de errado.

Como aqui link e aqui como posso comparar dados em 2 arquivos para identificar dados comuns e exclusivos? Eu tenho dois arquivos dos quais eu gosto de filtrar as linhas do arquivo 2 que correspondem à coluna 1 no arquivo 1 Na minha opinião, a solução proposta para as mesmas perguntas deve funcionar, mas infelizmente não. Meus arquivos são separados por tabulações.

arquivo_1.txt

apple
great
see
tree

arquivo_2.txt

apple    5.21      Noun
around   6.21      Adverb
great    2         Adjective
bee      1         Noun
see      7.43      Verb
tree     3         Noun

A saída deve se parecer com:

apple    5.21      Noun
great    2         Adjective
see      7.43      Verb
tree     3         Noun

Eu tentei comunicar -12,

awk (e.g awk 'NR==FNR{a[$1];next} ($1 in a)' file_1.txt file_2.txt > output.txt)

Eu sei que isso pode ser uma pergunta estúpida, peço desculpas antecipadamente. No entanto, não pareço ser capaz de descobrir isso.

    
por dani_anyman 04.02.2017 / 14:05

1 resposta

2

Uma maneira de fazer isso seria assim:

awk '   BEGIN { while ((getline <"file2.txt") > 0) {REC[$1]=$0}}
    {print REC[$1]}' <file1.txt

O getline no início lê o arquivo2.txt e o armazena em um array REC , indexado pelo primeiro registro.

A seção "principal" do código lê o conteúdo de file1.txt e simplesmente usa a primeira palavra na linha para procurar a linha apropriada do arquivo2.txt, agora armazenado em REC .

Exemplo de saída:

apple    5.21      Noun
great    2         Adjective
see      7.43      Verb
tree     3         Noun 
    
por Nick Sillito 04.02.2017 / 14:21