Faire une liste grace a awk

Résolu
trauqnej Messages postés 162 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je voudrais afficher par lettre d'alphabet le nombre de ligne de mon fichier

code basique :
awk -F"|" ' BEGIN{lettre=ARGV[2];delete ARGV[2]}; $3 ~ /^A/ {print $3}}'
repertoireTel.csv | wc -l

là c'est bon mais

voici le code "amélioré":
for x in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z;
do echo $lettre ;
awk -F"|" ' BEGIN{lettre=ARGV[2];delete ARGV[2]}; $3 ~ /^lettre/ {print $3}}'
repertoireTel.csv $lettre | wc -l ;
done

là , cela ne fonctionne pas... Une idée ?

4 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    pas besoin de lire 26 fois le fichier
    awk -F "|" '$3 ~ /^[A-Z]/ {x[substr($3, 1, 1)]++} END{for(n in x)print n, x[n]}' repertoireTel.csv   
    1
  2. Utilisateur anonyme
     
    salut,

    for x in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z;   
    do awk -F"|" ' $3 ~ /^lettre/ {print $3; n++}END{print n}' lettre=$x   
    repertoireTel.csv   
    done
    ça devrait aller, mais sans le fichier source, et sans la sortie désirée...

    si c'est du bash
    for x in {A..Z}
    0
  3. trauqnej Messages postés 162 Statut Membre 23
     
    la solution de dubcek est bonne
    celle de qqchquicommenceparQ me met 26 ligne blanche.
    c'est dommage, parce que j'aurais voulu savoir comment passer des variables
    dans le cas de "^lettre" en adéquation avec "lettre=$x"

    mais bon, j'ai la solution de mon pb donc résolu
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    pour passer une variable dans awk et l'utilser comme critère de recherche:
    $ x="C" ; printf "%c\n" {A..D} | awk -v x=$x '$0 ~ "^" x { print}'
    C
    $ 
    0