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 fichier f2. NR et FNR les deux contiennent des numéros de ligne avec la différence étant FNR 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 (NRkey 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 sur f1 fichier. NR==FNR condition ne deviendra pas faux FNR augmentera de 1 et NR 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 dans awk 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 fichier f2 nous avons mis en premier.
25
répondu Chris 2016-06-01 21:11:31