Je veux écrire un shell script
qui obtient deux files A
et B
, et get un résultat comme celui-ci:
Fichier A
:
user_a tel_a addr_a user_b tel_b addr_b
Fichier B
:
process_1 user_a process_2 user_a process_3 user_b
Et le résultat:
user_a process_1 tel_a addr_a user_a process_2 tel_a addr_a user_b process_3 tel_b addr_b
Comment puis-je faire ceci? awk
ou quelque chose d'autre?
join
…
join -1 2 -2 1 FileB FileA
Sortie
user_a process_1 tel_a addr_a user_a process_2 tel_a addr_a user_b process_3 tel_b addr_b
Les files d'input doivent être sortingés par le champ key … Vos files d'exemple sont déjà sortingés, donc il n'y avait pas besoin, mais sinon vous pourriez incorporer le sorting comme suit.
join -1 2 -2 1 <(sort -k2 FileB) <(sort FileA)
Comme les join
et paste
ne sont pas disponibles partout (ils ne sont pas sur mon système basé sur BusyBox, par exemple), voici comment le faire avec awk, comme demandé:
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