Pesquisa colunas de um arquivo para uma coluna diferente em outro arquivo

1

Eu tenho dois arquivos de colunas variadas.

File1 :

pears   are fruits
apple   is  fruit
carrot  is  veg
celery  is  vegetable
oranges are fruits

File2 :

fruits apple   mycode is #q123c# for apple
fruits pears   my code is #q432c# for juicy
veg    celery  my code value is #q989c# for vegetables
veg    spinach code is #q783c# and is a type of vegetable
fruits papaya  i have code #q346c#
vegie  lettuce code #q445c# is vege

Precisa de um arquivo de saída ideal:

Q432C pears fruits
Q123C apple fruit
Q---C carrot veg
Q989C celery vegetable
Q---C oranges fruits

Precisa comparar a coluna 1 do Arquivo1 à coluna 2 de File2 . Se houver uma correspondência, imprima os códigos q-para-c nos dois campos # em File2 , Caso contrário, imprima um código vazio de q---c . E converta os códigos q-c em letras maiúsculas.

Espero que a saída tenha o mesmo número de linhas que File1 .

Idealmente, o arquivo de saída deve ter o código q-para-c de File2 e, em seguida, anexar as linhas correspondentes de File1 . Mas, no momento, eu só descobri como cortar os códigos q-para-c das linhas que combinavam com File2 e colocadas em maiúsculas:

awk 'NR==FNR { a[$1]=1; next } ($2 in a) {print $0} ' File1 File2 | sed -e 's/.*#\(.*\)#.*//' | tr [a-z] [A-Z] > outputFile

... alguém poderia me ajudar? Eu sou novo em awk e scripts.

Eu ia fazer uma junção depois de obter os resultados acima, mas arriscaria não juntar os códigos q-para-c corretos às linhas certas, porque o arquivo de saída resultante não tem tantas linhas quanto File1 .
Estou aberto a outra solução que não seja awk .

Se alguém puder ajudar, eu realmente aprecio isso. :)
Desde já, obrigado.

    
por achinghead 23.04.2018 / 15:22

1 resposta

2

Com o comando único awk :

awk 'NR == FNR{
         match($0, /#q[0-9]{3}c#/);
         fruits[$2] = substr($0, RSTART + 1, RLENGTH - 2);
         next
     }
     { print ($1 in fruits? toupper(fruits[$1]) : "Q---C"), $1, $3 }' file2 file1

A saída:

Q432C pears fruits
Q123C apple fruit
Q---C carrot veg
Q989C celery vegetable
Q---C oranges fruits
    
por 23.04.2018 / 15:31