Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile

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

metalux #5 a écrit :

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