Fichier1:
.tid.setnr := 1123 .tid.setnr := 3345 .tid.setnr := 5431 .tid.setnr := 89323
Fichier2:
.tid.info := 12 .tid.info := 3 .tid.info := 44 .tid.info := 60
Fichier de sortie:
.tid.info := 12 .tid.setnr := 1123 .tid.info := 3 .tid.setnr := 3345 .tid.info := 44 .tid.setnr := 5431 .tid.info := 60 .tid.setnr := 89323
Utilisation de la paste
:
paste -d \\n file2 file1
Une autre solution awk:
awk '{print; getline < "file1"; print}' file2
Utilisation de awk
( gawk
, nawk
, mawk
):
awk 'NR==FNR {x[FNR]=$0;next} {print x[FNR]"\n"$0}' file2 file1 > outputfile
NR==FNR {x[FNR]=$0;next}
est égalisé uniquement si le numéro d'logging actuel est égal au numéro d'logging actuel du file (donc il est apparié uniquement lors du traitement du premier file): stocke le numéro d'logging actuel traitement de l'logging dans le tableau x
à un index égal au numéro d'logging du file en cours et ignore l'logging en cours {print x[FNR]"\n"$0}
: imprime le contenu du tableau x
à un index égal au numéro d'logging actuel du file suivi d'une nouvelle ligne et du contenu de l'logging en cours ~/tmp$ cat file1 .tid.setnr := 1123 .tid.setnr := 3345 .tid.setnr := 5431 .tid.setnr := 89323 ~/tmp$ cat file2 .tid.info := 12 .tid.info := 3 .tid.info := 44 .tid.info := 60 ~/tmp$ awk 'NR==FNR {x[FNR]=$0;next} {print x[FNR]"\n"$0}' file2 file1 .tid.info := 12 .tid.setnr := 1123 .tid.info := 3 .tid.setnr := 3345 .tid.info := 44 .tid.setnr := 5431 .tid.info := 60 .tid.setnr := 89323
La solution de paste
est la plus portable et la plus efficace. Je ne mentionne cette alternative que si vous préférez son comportement dans le cas où les deux files n'ont pas le même nombre de lignes:
Avec GNU sed
:
sed Rfile1 file2
Si file1
a less de lignes que file2
, sed
n'affiche rien quand il est épuisé (par opposition aux lignes vides pour paste
).
Si file1
a plus de lignes que file2
, ces lignes supplémentaires seront supprimées (par opposition à l'printing de lignes vides pour le file2
avec paste
).
$ paste ab 1 a 2 b 3 4 $ paste -d \\nab 1 a 2 b 3 4 $ sed Rb a 1 a 2 b 3 4 $ sed Ra b a 1 b 2
La solution la plus simple est donnée ci-dessous.
cat file1 >> file2
ou
cat file2 >> file1