AWK -Imprimer le dernier champ de chaque ligne du fichier d'entrée
J'ai un fichier d'entrée de fichier dont le contenu est constamment mis à jour
avec un divers nombre de domaines, ce que je suis en train est d'imprimer un nouveau fichier
le dernier champ de chaque ligne du fichier d'entrée:
awk '{print $(NF-1)}' outputfile
d'erreur:
et
awk: (nom de fichier=- FNR=2) fatal: tentative d'accès à champ -1
Besoin d'aide. Merci d'avance
OriginalL'auteur Zerg12 | 2013-03-27
Vous devez vous connecter pour publier un commentaire.
Sur les lignes comportant pas de champs (les lignes vides, ou tous les espaces)
NF
est 0, de sorte que évalue à$(-1)
. Aussi, si il n'y a qu'un seul champ de votre code d'impression$0
qui peut ne pas être ce que vous voulez.OriginalL'auteur John Kugelman
Devrait être
awk 'NF > 1 { print $(NF - 1); }'
awk 'NF { print $(NF - 1) }'
n'est pas correct. LorsqueNF == 1
il va imprimer$0
qui n'est pas prochaine pour le dernier champ.Qu'entendez-vous par "mais perdre le nul de la déclaration (en ajoutant un point-virgule)"?
Le point-virgule après la déclaration
print $(NF - 1)
introduit un rapport suivant qui est vide ou nulle. Juste se débarrasser de la semi-colon et le problème est résolu, c'est à dire utiliser{ print $(NF - 1) }
pas{ print $(NF - 1); }
.C'est mon style. J'aimerais le faire paraître plus comme une déclaration. 🙂
Afin de comprendre pourquoi ça me fait perdre du temps et de la frustration quand je vois les parasites des points-virgules - il y a une énorme différence entre ces 2 états?:
x > y { print }
etx > y; { print; }
. De même pour{x = a b}
et{x = a; b;}
. Alors, quand vous lancer dans des points-virgules avec l'intention d'entre eux ne font rien, ma première pensée est de comprendre ce que c'est qu'ils font depuis le placement des points-virgules souvent a un grand impact sur votre programme et puis quand j'arrive à me convaincre que c'est ne rien faire et c'est un "choix de style" à la place alors la gêne occasionné....OriginalL'auteur pynexj
un autre awk ligne: (golf un peu):
echo foo | awk 'NF && $0 = $(NF-1)'
sortiesfoo
.ur droit. devrait être la norme nf>1. fixe
OriginalL'auteur Kent