Je vais commencer par répondre à tes deux questions:
Pour pouvoir utiliser plusieurs fichiers d'entrée avec AWK il faut utiliser la fonction getline.
Pour pouvoir formater une output (justification, nombre de décimales, ...) il faut utiliser printf.
Je te conseille de lire le man pour ces deux fonctions qui sont relativement complexes (surtout la syntaxe de printf).
Pour ton exemple, si j'ai bien compris tu as deux fichiers :
Le premier composé de 3 fields:
olivier@MiniPC:~/temp$ cat file1
a b c
f g h
k l m
p q r |
Et le deuxième de 2 fields:
olivier@MiniPC:~/temp$ cat file2
d e
i j
n o
s t |
Et le résultat devrait ressembler à:
olivier@MiniPC:~/temp$ cat file3
a b c d e
f g h i j
k l m n o
p q r s t |
Voici le petit "programme" AWK permettant d'arriver à ce résultat en utisant getline pour lire file2 et un printf basique pour la mise en page:
olivier@MiniPC:~/temp$ cat test.awk
BEGIN {
i=1 ; j=1
while ((getline < "file2" ) > 0 ) {
arr[i,4]=$1 ; arr[i,5]=$2
i++
}
close (file2)
}
{
arr[j,1]=$1 ; arr[j,2]=$2 ; arr[j,3]=$3
j++
}
END {
for ( k=1 ; k <= i ; k++ ) {
printf "%2s %2s %2s %2s %2s\n",arr[k,1],arr[k,2],arr[k,3],arr[k,4],arr[k,5]
}
} |
Et la commande pour créer file3:
olivier@MiniPC:~/temp$ awk -f test.awk file1 > file3 |
Pour résumer rapidement, dans le "bloc" BEGIN, grâce à la commande getline, file2 est lu séquentiellement et les fields 4 et 5 d'un tableau arr[] sont populés en utilisant l'incrément i comme clé unique.
Dans le corps du "programme", le fichier file1 est lu séquentiellement et les fields 1,2,3 du tableau arr[] sont populés avec les données de file1.
Et dans le bloc END, les valeurs du tableau arr[] qui contient les données de file1 et file2 sont affichées en utilisant printf.
C'est assez basique, aucun contrôle n'est fait, et si le nombre de lignes est différent entre file1 et file2 la sortie sera décallée. Mais avec qques tests ça devrait passer
Il y a certainement plus simple ... mais bon ...
---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.