Author: anne.guilde@free.fr Date: To: guilde Subject: Re: awk
Le 17/12/2019 à 00:41, Jérôme Villafruela a écrit : > 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
>