Faire une liste grace a awk

Résolu/Fermé
trauqnej Messages postés 154 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 septembre 2022 - 15 juin 2012 à 18:05
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 - 19 juin 2012 à 10:01
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

dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
16 juin 2012 à 08:26
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
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 mardi 7 juin 2005 Statut Membre Dernière intervention 5 septembre 2022 23
19 juin 2012 à 09:32
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 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
19 juin 2012 à 10:01
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