Remplacer colonne dans un fichier par colonne d'un autre en utilisant awk?
j'ai deux fichiers:
f1:
111 aaa 444
222 bbb 555
333 ccc 666
f2:
111 333 000 444
222 444 111 555
333 555 555 666
Comment remplacer la deuxième colonne de " f1 "par la troisième colonne de" f2 " en utilisant awk?
12
demandé sur
kofucii
2011-10-21 11:49:17
1 réponses
essaie:
awk 'FNR==NR{a[NR]=;next}{=a[FNR]}1' f2 f1
Sortie:
111 000 444
222 111 555
333 555 666
Explication du code ci-dessus:
FNR==NR
vous permet de travailler avec un fichier entier à la fois. Dans ce cas c'est le fichierf2
.NR
etFNR
les deux contiennent des numéros de ligne avec la différence étantFNR
est réinitialisé à 1 quand un nouveau fichier est lu oùNR
continue d'augmenter.- Pendant que nous travaillons
f2
fichier, nous créons un tableau appeléa
en utilisant le numéro de ligne (NR
key
et la troisième colonne () comme valeur.
next
nous permet de sauter le reste du bloc d'action. - une Fois
f2
fin du fichier, Nous commençons à travailler surf1
fichier.NR==FNR
condition ne deviendra pas fauxFNR
augmentera de 1 etNR
non. Ainsi, seul le deuxième bloc d'action{=a[FNR]}
va être travaillé sur. - ce que ce bloc fait est il ré-assigne la valeur de la deuxième colonne à la valeur du tableau en cherchant le numéro de ligne.
1
à la fin imprime la ligne. Elle renvoie true, et dansawk
les énoncés vrais entraînent l'impression de la ligne.f2 f1
est l'ordre des fichiers défini. Puisque nous voulons créer un tableau à partir du fichierf2
nous avons mis en premier.
25
répondu
Chris
2016-06-01 21:11:31