Como obter o seguinte resultado usando o awk?

2

Existem dois arquivos que eu vou extrair os dados:

arquivo1.txt:

Type Number ID Element Email
Zed  21-2   9  Blade

arquivo2.txt:

Name Order Email_Address
Ken  19    [email protected]
Tom  21    [email protected]
Ray  23    [email protected]

Como posso combinar dois arquivos em um arquivo com os seguintes resultados:

Type Number ID Element Email
Zed  21-2   9  Blade   [email protected]

Aqui está o que eu tentei antes:

awk 'NR==1{print $0;next} NR==FNR{a[$2]=$1"\t"$3"\t"$4";next} {if($2 in a){print(a[$2]"\t"$3)}}' file1.txt file2.txt

Eu acho que não consigo obter os resultados porque a declaração if tem algum problema. Como posso obter os resultados desejados?

    
por Owen 13.09.2018 / 09:35

2 respostas

1

$ awk 'BEGIN{print "Type Number ID Element Email"}NR==FNR{Arr[$2]=$NF;next}{split($2,b,"-");if(b[1] in Arr){print $0,Arr[b[1]]}}' file2.txt file1.txt
Type Number ID Element Email
Zed  21-2   9  Blade [email protected]

Arr[$2]=$NF - > armazene o endereço de e-mail no Array com o índice da coluna 2 split($2,b,"-") - > divida o valor da segunda coluna e use-o para a pesquisa.

    
por 13.09.2018 / 09:46
0
awk '
  NR == FNR {email[$2] = $3; next} 
  FNR == 1 {print; next}
  {
    for (order in email)
      if ($2 ~ "^" order "\>") {
        print $0, email[order]
        break
      } 
  }
' file2.txt file1.txt | column -t
Type  Number  ID  Element  Email
Zed   21-2    9   Blade    [email protected]

Essa expressão regular procura o número do pedido no início ( ^ ) do campo Número, com um limite de palavra ( \> ) para que o número de pedido "21" do arquivo2 não corresponda ao número "211-1 "do arquivo1

    
por 13.09.2018 / 16:43