Compare dois arquivos e imprima os valores correspondentes sem ignorar duplicatas

3

Estou tentando comparar dois arquivos e obter os valores correspondentes. Eu tentei este comando:

grep -Fwf file_1.txt file_2.txt > matched_output.txt

No entanto, este script extrai apenas valores únicos .

File_1.txt

K00012
K00012
K00024
K00024
K00024
K00027
K00027
K00027
K00027

File_2.txt

ko:K00012 UGDH; UDPglucose 6-dehydrogenase
ko:K00024 mdh; malate dehydrogenase
ko:K00027 ME2; malate dehydrogenase (oxaloacetate-decarboxylating)

Resultado esperado

K00012 ko:K00012 UGDH; UDPglucose 6-dehydrogenase
K00012 ko:K00012 UGDH; UDPglucose 6-dehydrogenase
K00024 ko:K00024 mdh; malate dehydrogenase
K00024 ko:K00024 mdh; malate dehydrogenase
K00024 ko:K00024 mdh; malate dehydrogenase
K00027 ko:K00027 ME2; malate dehydrogenase (oxaloacetate-decarboxylating)
K00027 ko:K00027 ME2; malate dehydrogenase (oxaloacetate-decarboxylating)
K00027 ko:K00027 ME2; malate dehydrogenase (oxaloacetate-decarboxylating)
K00027 ko:K00027 ME2; malate dehydrogenase (oxaloacetate-decarboxylating)
    
por vahap eldem 19.07.2016 / 11:33

2 respostas

1

Como esses valores K?????? são exclusivos no segundo arquivo, você pode usar awk , primeiro lendo o segundo arquivo e salvando cada linha em uma matriz no índice K?????? e processando o primeiro arquivo e para cada K?????? que está em array imprime o valor e a linha correspondente:

awk 'NR==FNR{split($1, a, ":"); u=a[2];b[u]=$0; next}
{if ($0 in b) {print $0, b[$0]}}' File2_.txt File1_.txt

Como alternativa, com sed você pode transformar o segundo arquivo em um script sed e usá-lo para processar o primeiro arquivo:

sed 's|.*:\([^[:blank:]]*\)[[:blank:]].*|//c\\
 &|' File2_.txt | sed -f - File1_.txt

Isso pressupõe que exista apenas um : (após ko ) e nenhuma barra invertida no segundo arquivo e que K?????? não pode conter barras.

    
por 19.07.2016 / 14:20
1
while read line
do
    grep -q "$line" File_2.txt
    if [ "$?" -eq "0" ]; then
         echo -n "$line "
         grep "$line" File_2.txt
    fi
done < File_1.txt

Sinta-se à vontade para ajustar este script para obter um resultado muito melhor

    
por 19.07.2016 / 11:37