Salut à tous,
J'aurais besoin d'explications pour comprendre une commande que j'ai trouvée ici.
Je ne comprends pas la partie
{f=NR} f&&NR-1==f RS="1"
Comment &&
puis ==
fonctionnent ensemble dans cette commande ? etc… J'ai bien saisi le but (RS utilise le caractère "1" comme séparateur et on affiche l'item après notre pattern en incrémentant NR) mais pas le fonctionnement.
Merci pour votre aide.
# grymoire
Posté par freem . Évalué à 4.
Ce site est juste génial pour comprendre les outils UNIX quand on les découvre.
Je t'avoue ne pas maîtriser awk, mais je pense qu'en passant un peu de temps à lire la bonne section, tu devrais comprendre ce bout de code.
# Une explication
Posté par pma . Évalué à 10.
Bonjour,
La commande complète et ce qui est attendu:
Pour comprendre comment ça marche, le plus simple, ici, est de l'exécuter morceau par morceau en affichant les valeurs des variables:
RS="1"
est vrai tout au long du programme. Le caractère "1
" remplace le retour à la ligne (\n
) pour séparer les Records (une ligne en temps normal).NR
àf
.f
contient le numéro de ligne de la clef recherchée, reste à afficher la ligne suivante qui contient la valeur. Elle est sélectionnée parf&&NR-1==f
qui s'écritf && ( (NR-1) == f)
. Considérons seulement(NR-1)==f
, cette expression est vraie 2 fois, une avant l'assignation de la première expression, l'autre après.Donc on se protège en vérifiant que f est assigné:
( ( f ) && ( ( NR -1 ) == f ) )
On peut donc écrire le programme comme
Note: Le séparateur "1" n'est pas très bien choisi (pas de
FIELDA1
)[^] # Re: Une explication
Posté par HuriSaki . Évalué à 1. Dernière modification le 30 août 2017 à 22:46.
Ok je vois. Donc au final on n'incrémente pas NR, on attend qu'il prend une valeur supérieure de 1 à f, qui lui même n'aura une valeur que lorsque l'on trouvera le pattern FIELDA2, puis le ET logique && permet d'être sûr qu'on affichera $0 uniquement quand f existe. C'est vraiment ingénieux…
Tes explications étaient super claires pma. Un grand merci.
[^] # Re: Une explication
Posté par Flyounet (site web personnel) . Évalué à 1.
Non pas tout à fait d'accord sur ce qui est attendu :
et pas
FIELDA2
.En dehors de cela, c'est parfaitement clair. Merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.