Um script de shell para unir dois arquivos

8

Eu quero escrever um shell script que obtenha dois arquivos A e B e obtenha um resultado como este:

Arquivo A :

user_a tel_a addr_a
user_b tel_b addr_b

Arquivo B :

process_1 user_a
process_2 user_a
process_3 user_b

E o resultado:

user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b

Como posso fazer isso? awk ou outra coisa?

    
por Navid Farhadi 26.02.2012 / 19:45

2 respostas

15

join ...

join -1 2 -2 1 FileB FileA

Saída

user_a process_1 tel_a addr_a
user_a process_2 tel_a addr_a
user_b process_3 tel_b addr_b

Os arquivos de entrada precisam ser classificados pelo campo-chave ... Seus arquivos de exemplo já estão classificados, portanto, não houve necessidade, mas, caso contrário, você poderia incorporar a classificação da seguinte forma.

join -1 2 -2 1 <(sort -k2 FileB) <(sort FileA)
    
por 26.02.2012 / 20:24
3

Como join e paste não estão disponíveis em todos os lugares (eles não estão no meu sistema baseado no BusyBox, por exemplo), aqui está como fazê-lo com o awk, conforme solicitado:

awk 'BEGIN {
    while( (getline < "fileA") > 0) A[$1]=$2 OFS $3 # read fileA into the array A
    close("fileA")
  } {
    print $2, $1, A[$2]
  }' fileB
    
por 19.04.2012 / 21:22