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==NRvous permet de travailler avec un fichier entier à la fois. Dans ce cas c'est le fichierf2.NRetFNRles deux contiennent des numéros de ligne avec la différence étantFNRest réinitialisé à 1 quand un nouveau fichier est lu oùNRcontinue d'augmenter.- Pendant que nous travaillons
f2fichier, nous créons un tableau appeléaen utilisant le numéro de ligne (NRkeyet la troisième colonne () comme valeur.nextnous permet de sauter le reste du bloc d'action. - une Fois
f2fin du fichier, Nous commençons à travailler surf1fichier.NR==FNRcondition ne deviendra pas fauxFNRaugmentera de 1 etNRnon. 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 dansawkles énoncés vrais entraînent l'impression de la ligne.f2 f1est l'ordre des fichiers défini. Puisque nous voulons créer un tableau à partir du fichierf2nous avons mis en premier.
25
répondu
Chris
2016-06-01 21:11:31