Vous n'êtes pas identifié(e).
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
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=mondenom= 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).
Hors ligne
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
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.
Hors ligne