#1 Le 27/04/2014, à 22:48
- Vicolaships
[résolu] Trier des lignes de texte
Salut,
Je suis en train de faire un script pour savoir quels sont mes dossiers de photos qui sont; proportionnellement au nombre de fichiers; les plus lourds :
#!/bin/sh
find -maxdepth 1 -type d | while read dir; do
# Ignore xmp files from Darktable
count=$(find "$dir" -type f -not -iname \*.xmp | wc -l)
# Size of the folder
size=$(du -s "$dir" | awk -F\ '{print $1}')
size=$(echo $(( $size / 1000 ))) # In MB
# Mean file size
ratio=$(echo $size / $count | bc -l)
echo "$dir: $count pictures for $size MB, mean file size = $ratio"
done
Je lance ce script dans mon dossier Images et donc pour chaque sous-dossier il m'indique le nombre de fichiers (en ignorant les .xmp) et le poids du dossier (sans ignorer les .xmp mais c'est pas grâve)
J'aimerai trier la sortie du terminal pour afficher en premier les lignes dont le $ratio est le plus élevé.
./Dossier1: 14 pictures for 16 MB, mean file size = 1.14285714285714285714
./Dossier2: 16 pictures for 115 MB, mean file size = 7.18750000000000000000
./Dossier3: 91 pictures for 114 MB, mean file size = 1.25274725274725274725
Deviendrait :
./Dossier2: 16 pictures for 115 MB, mean file size = 7.18750000000000000000
./Dossier3: 91 pictures for 114 MB, mean file size = 1.25274725274725274725
./Dossier1: 14 pictures for 16 MB, mean file size = 1.14285714285714285714
Comment faire ?
Merci
Dernière modification par Vicolaships (Le 28/04/2014, à 20:24)
Ubuntu 14.04 x64
Hors ligne
#2 Le 27/04/2014, à 23:26
- pingouinux
Re : [résolu] Trier des lignes de texte
Bonsoir,
Remplacer la dernière ligne de ton script par :
done | sort -k 11 -rn
Hors ligne
#3 Le 28/04/2014, à 20:24
- Vicolaships
Re : [résolu] Trier des lignes de texte
Merci pour le coup de pouce :
#!/bin/sh
find -maxdepth 1 -type d | while read dir; do
# Ignore xmp files from Darktable
count=$(find "$dir" -type f -not -iname \*.xmp | wc -l)
# Size of the folder
size=$(du -s "$dir" | awk -F\ '{print $1}')
size=$(echo $(( $size / 1000 ))) # In MB
# Mean file size
ratio=$(echo $size / $count | bc -l)
echo "$ratio | $dir: $count pictures for $size MB"
done | sort -k 1 -rn
Ubuntu 14.04 x64
Hors ligne
#4 Le 28/04/2014, à 20:33
- pingouinux
Re : [résolu] Trier des lignes de texte
Attention, c'est sort -k 11 -rn et non sort -k 1 -rn (sinon tu tries sur les noms de dossiers).
Hors ligne
#5 Le 28/04/2014, à 20:42
- metalux
Re : [résolu] Trier des lignes de texte
Bonjour,
Je cherchais la solution quand pingouinux est apparu plus vite que son ombre!
Je n'arrives pas à interpréter le man de sort concernant cette option. Voici le contenu:
-k, --key=POS1[,POS2]
utiliser la clé de tri commençant à POS1 (les positions sont
comptées à partir de 1) et se terminant à POS2 (la fin de la
ligne par défaut). Voir le format de POS ci-dessous.
POS est F[.C][OPTS], où F est le numéro du champ et C la position du
caractère dans le champ ; les deux commencent à partir de 1. Si ni -t
ni -b n'est utilisée, les caractères d'un champ sont comptés en commen‐
çant à l'espace précédent. OPTS se présente sous la forme d'une ou plu‐
sieurs options de tri composée d'une lettre isolée, lesquelles écrasent
le classement global pour cette clé. Si aucune clé n'est indiquée, la
ligne entière est utilisée comme clé.
Un peu d'aide pour déchiffrer tout ça, c'est pas très clair pour moi. Concrètement c'est le 11 que je n'arrives pas à évaluer pourquoi ça correspond à la valeur souhaitée.
Hors ligne
#6 Le 28/04/2014, à 22:14
- pingouinux
Re : [résolu] Trier des lignes de texte
Concrètement c'est le 11 que je n'arrives pas à évaluer pourquoi ça correspond à la valeur souhaitée.
On veut trier sur le dernier champ de la ligne, qui est le 11ème (les séparateurs sont les espaces).
./Dossier1: 14 pictures for 16 MB, mean file size = 1.14285714285714285714
Hors ligne
#7 Le 29/04/2014, à 00:16
- metalux
Re : [résolu] Trier des lignes de texte
C'est tout de suite plus clair comme ça.
Merci pour l'explication.
Hors ligne