user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 14-11-2016 11:00:06

rodrigue daniel
Membre

Différence de syntaxe pour deux instructions awk

SALUT

je suis un peu perplexe sur deux instructions awk. Il semblerait que ces deux instructions awk sont les mêmes en terme de résultat (sauf si je me trompe) :

awk 'BEGIN{FS=":"} {print "nom=" $1 " uid=" $3}' /etc/passwd


awk 'BEGIN{FS=":"} {print "nom=" $1 " uid=" $3}' < /etc/passwd

Je souhaiterais savoir pourquoi c'est la même chose (sauf si je me trompe). SVP plus d'explication.

MERCI


Passionné par la Sécurité Informatique.
Le véritable ennemi de la connaissance n'est pas l'ignorance mais l'illusion de la connaissance.
La quête de la connaissance passe d'abord par l'humilité et ensuite la détermination.

Hors ligne

#2 14-11-2016 13:40:44

WarLocG
#! modo de compet

Re : Différence de syntaxe pour deux instructions awk

Les symboles '<' et '<<' redirigent le flux vers la gauche, en somme tu importes, ici, le contenu d'un fichier (ici /etc/passwd et parce que ton symbole de redirection est '<') dans ta commande. La commande awk demande également à ce qu'on lui passe une source pour réaliser l'opération demandée 'BEGIN{FS=":"} {print "nom=" $1 " uid=" $3}' autrement tu aurais eu ca:

warlocg@debian-8:~$ awk 'BEGIN{FS=":"} {print "nom=" $1 " uid=" $3}'

nom= uid=
yolo
nom=yolo uid=
salut le monde
nom=salut le monde uid=
salut:le:monde
nom=salut uid=monde

nom= uid=
^C

Et j'ai cloturé avec un Ctrl+C autrement ca aurait continué à boucler indéfiniment.

La redirection vers la gauche est pas tellement utilisée vu que la plupart des commandes demandent d'opérer par rapport à une ressource, mais ca peut etre utile par exemple comme échappement avec certaines commandes, exemple avec un cat.
cat <eof>> unfichier et cat <<eof>> unfichier

warlocg@debian-8:~$ cat <eof>> unfichier
bash: eof: Aucun fichier ou dossier de ce type
warlocg@debian-8:~$ cat <<eof>> unfichier
> salut
> le
> monde
> eof
warlocg@debian-8:~$ cat unfichier
salut
le
monde
warlocg@debian-8:~$ cat <unfichier>> unautrefichier
warlocg@debian-8:~$ cat unautrefichier
salut
le
monde
warlocg@debian-8:~$

Dans l'exemple 'eof' est mon échappement, il me sert a sortir de la boucle sans avoir a faire de Ctrl+C. Le '<<' est pour un flux passé sur l'entrée standard, et '<' pour un fichier. Si le fichier n'existe pas il en sortira une erreur (voir plus haut).


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

#3 14-11-2016 18:16:15

rodrigue daniel
Membre

Re : Différence de syntaxe pour deux instructions awk

SALUT

Grand merci WarLocG, tu as touché vraiment le noeud de mes soucis. Je me suis dis que la fonctionnalité était lié seulement à la commande awk.
STP, je souhaiterais plus d'explication sur ton deuxième exemple. Car j'ai moi même les tests et j'ai constaté que l'on peut mettre n'importe quel caractère pour
préciser le caractère de sortie de la boucle : j'ai testé par exemple avec "oooo". STP plus d'explication car je n'ai pas bien saisi. Grand merci
MERCI

Dernière modification par rodrigue daniel (14-11-2016 18:18:05)


Passionné par la Sécurité Informatique.
Le véritable ennemi de la connaissance n'est pas l'ignorance mais l'illusion de la connaissance.
La quête de la connaissance passe d'abord par l'humilité et ensuite la détermination.

Hors ligne

#4 14-11-2016 21:22:51

WarLocG
#! modo de compet

Re : Différence de syntaxe pour deux instructions awk

C'est bien ca, la chaîne de caractère n'a pas d'importance dans sa taille où son caractère "random", elle doit juste être l'identique à celle utilisée pour sortir de la boucle.

En fait, c'est comme si tu avais une boucle while dans laquelle ta condition de sortie c'est que ton message == le motif que tu as choisi. Et tant que tu tapes autre chose que ton motif tu restes dans ta boucle.

Pour le deuxième exemple, à la partie cat <unfichier >> unautrefichier (je ne sais pas si tu y faisais allusion), comme le fichier "unfichier" existe dorénavant, et bien le contenu du fichier est lu et est redirigé par "append" (une copie à la suite du contenu de l'autre fichier si le fichier n'est pas vide) au fichier "unautrefichier", qui, n'existant pas encore, va simplement être créé, autrement aurait rajouté le nouveau contenu à la suite du contenu qu'il aurait déjà (tu as suivi ?). Là aussi, pour l' "exportation" il y a deux symboles ( '>' et '>>' ) où je choisi le deuxième pour ne pas écraser ce que contiendrait le fichier de destination.

Bien à toi.


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

Pied de page des forums