Re: awk

Page principale

Répondre à ce message
Auteur: Jérôme Villafruela
Date:  
À: guilde
Sujet: Re: awk
Le 17/12/2019 à 00:01, anne.guilde@??? a écrit :
> bonjour,
>
> Quelqu'un peut me traduire
> awk -F : ' /^BEGIN|^ |^|^;|^=|^END|^VERSION|^$/ {next} 1 {print $1 ;
> next} ' <fichier | sort | uniq  > result
>
> C'est cela pour la traduction :
> ' /^BEGIN|^ |^|^;|^=|^END|^VERSION|^$/ {next} 1 {print $1 ; next} '
>
> Il lit la ligne et s'arrête au caractère = ?
>
>

-F : => on considère que les champs sont séparés par le caractère : Les
champs sont disponibles dans les variables $1, $2 etc la variable $0
représente la ligne entière.

Un programme awk est une suite de : motif {action} l'action est exécutée
pour toutes les lignes sélectionnées par le motif.

/^BEGIN|^ |^|^;|^=|^END|^VERSION|^$/ {next}  => action next (passer à
l'enregistrement suivant) si la ligne ne contient que BEGIN ou un espace
ou un ; ou = ou END.  Je ne vois pas l'utilité du |^|, j'aurais plutôt
écrit :   /^BEGIN|^ |^;|^=|^END|^VERSION|^$/ {next}

1 {print $1 ; next} => 1 == vrai, donc imprimer le 1er champ. Le next
est superflu.

En résumé : le programme imprime le 1er champ d'un fichier vcard en
ignorant les délimiteurs BEGIN END etc. Avec les commandes qui suivent
tu vas retrouver dans result la liste de tous les champs utilisés dans
le fichier vcard

Version simplifiée :

awk -F : ' /^BEGIN|^ |^;|^=|^END|^VERSION|^$/ {next}  {print $1} ' <
fichier| sort -u >result

Bonne nuit,

Jérôme