Eu quero escrever um shell script
que tem dois arquivos A
e B
e obter 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 alguma outra coisa?
text-processing
awk
join
Navid Farhadi
fonte
fonte
cut
epaste
somente, mas eu não entendo a sintaxe correta.cut
epaste
consulte a página de manual.Respostas:
join
...Resultado
Os arquivos de entrada precisam ser classificados pelo campo-chave ... Seus arquivos de exemplo já estão classificados, portanto, não havia necessidade; caso contrário, você poderia incorporar a classificação da seguinte forma.
fonte
man join
na linha de comando do terminal ...-1 2 -2 1
significa: ingressar no '1º arquivo 2º campo' e no ' Segundo arquivo 1st-field 'Como
join
epaste
não está disponível em todos os lugares (eles não estão no meu sistema baseado no BusyBox, por exemplo), veja como fazê-lo com o awk, conforme solicitado:fonte
A[$1]=$2 OFS $3
... Aqui está outra variante que evita o loop manual em BEGIN, mas é praticamente o mesmo (para awk ), embora introduza um teste de condição desnecessário para o segundo arquivo:awk 'NR==FNR {A[$1]=$2 OFS $3;next} {print $2, $1, A[$2]}' fileA fileB
... (+ 1)