Faire une liste grace a awk

Résolu
trauqnej Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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 ?


A voir également:

4 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
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
trauqnej Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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