Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1844 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [shell] tris d'une taille

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[shell] tris d'une taille

n°948206
coolben
http://www.starbusiness.fr
Posté le 30-08-2007 à 08:30:51  profilanswer
 

Bonjour
 
J'aimeria pourvoir trier la sortie de cette commande :  

du -hs *


En utilisant sort -n comme ci dessous, la lettre réprésentant l'unité n'est pas prise en compte (k, M ,G ...)

du -hs * | sort -n


Une idèe ?

mood
Publicité
Posté le 30-08-2007 à 08:30:51  profilanswer
 

n°948208
wedgeant
Da penguin inside
Posté le 30-08-2007 à 08:36:48  profilanswer
 


retirer le -h ... :spamafote:


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°948481
sputnick
bip...bip...bip...bip...bi...b
Posté le 31-08-2007 à 02:07:41  profilanswer
 

Sinon :
 
du -s * | sort -nr | awk '{print $1, "ko", $2}'

n°948516
coolben
http://www.starbusiness.fr
Posté le 31-08-2007 à 07:29:48  profilanswer
 

merci pour ta réponse mais ca ne fais que rajouter Ko a toutes les lignes.
Ca reviens a faire un : du -s * | sort -n
Pas d'autres idées ?

n°948518
wedgeant
Da penguin inside
Posté le 31-08-2007 à 07:57:33  profilanswer
 

Ben je vois pas trop comment la commande "sort" pourrait comprendre que tu veux trier d'abord les Ko, puis les Mo et enfin les Go ... :gratgrat:
 
Elle est bête la commande, elle voit par exemple:
15Go
950Mo
300Ko
Et tu lui dit de trier selon les chiffres ... forcément, elle va te donner ça:
15Go
300Ko
950Mo
 
:spamafote:
 
Après, si tu veux qqch de vraiment aboutit, ben faut coder ça toi même :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°949009
coolben
http://www.starbusiness.fr
Posté le 01-09-2007 à 23:33:41  profilanswer
 

Et ne serait il pas possible d'afficher une colonne supplémentaire a la sortie de du.
Je m'explique, la première , la taille en byte (option -b) et la deuxième au format humain (option -h )

n°949050
blaireau o​ne
Posté le 02-09-2007 à 13:00:05  profilanswer
 


#
### Affichage "du" en 3 colonnes :
### octets - Ko|Mo - Repertoire
#
du -h > duh.tmp  
du -b > dub.tmp  
join -1 2 -2 2 -o 2.1,1.1,1.2 duh.tmp dub.tmp | \
sort -k1,1n | \
awk '{printf("%15s : %-8s%s\n",$1,$2,$3)}'
rm duh.tmp dub.tmp

n°949051
e_esprit
Posté le 02-09-2007 à 13:10:33  profilanswer
 

Sinon tu peux te faire un petit script qui va reformater la sortie d'un "du -sb | sort -n" pour une lecture "Humaine".
 
Exemple en Python :

Code :
  1. #! /usr/bin/python
  2. import sys
  3. import string
  4. line = sys.stdin.readline()
  5. while line != None and line != "":
  6.     size = float(line.split()[0])
  7.     if size > 1073741824:
  8.         print '%.2f'%(size/1073741824), "Go", string.join(line.split()[1:], " " )
  9.     elif size > 1048576:
  10.         print '%.2f'%(size/1048576), "Mo", string.join(line.split()[1:], " " )
  11.     elif size > 1024:
  12.         print '%.2f'%(size/1024), "Ko", string.join(line.split()[1:], " " )
  13.     line = sys.stdin.readline()


 
Puis :  
$ du -bs * | sort -n | /tmp/sort.py


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°949052
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 02-09-2007 à 13:21:03  profilanswer
 

Bah pas besoin de sortir du python :o
 
Le "du -s | sort -n" trie pour nous, on peut récupérer la liste triée avec cut, et on peut filer plusieurs arguments à "du -h"..... d'où :
 

du -sh $(du -s * | sort -n | cut -f 2)


 


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°949054
e_esprit
Posté le 02-09-2007 à 13:31:28  profilanswer
 

Ca marche pas pour les noms de repertoires qui contiennent des espaces :o


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
mood
Publicité
Posté le 02-09-2007 à 13:31:28  profilanswer
 

n°949059
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 02-09-2007 à 13:52:42  profilanswer
 

e_esprit a écrit :

Ca marche pas pour les noms de repertoires qui contiennent des espaces :o

 

ok ok je rajoute un while :

du -s * | sort -n | cut -f 2 | while read r; do du -sh "$r"; done

 

mais là tu vois, c'est moins beau... et c'est de ta faute :o :D

Message cité 1 fois
Message édité par Xavier_OM le 02-09-2007 à 13:53:20

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°949060
e_esprit
Posté le 02-09-2007 à 14:00:42  profilanswer
 

Ok, je plaide coupable :o
Mais au moins ca marche [:cosmoschtroumpf]


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
n°949071
franceso
Posté le 02-09-2007 à 15:16:17  profilanswer
 

Xavier_OM a écrit :


 
ok ok je rajoute un while :

du -s * | sort -n | cut -f 2 | while read r; do du -sh "$r"; done


 
mais là tu vois, c'est moins beau... et c'est de ta faute :o :D

Ouais, mais c'est un peu overkill de faire le 'du' en double...
 
Je penche pour une solution scriptée comme e_esprit. (mais perso je l'aurais plutôt fait en perl...)


---------------
TriScale innov
n°949153
coolben
http://www.starbusiness.fr
Posté le 02-09-2007 à 23:17:41  profilanswer
 

le script me plait bien merci

n°949623
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 04-09-2007 à 14:26:22  profilanswer
 

franceso a écrit :

Ouais, mais c'est un peu overkill de faire le 'du' en double...
 
Je penche pour une solution scriptée comme e_esprit. (mais perso je l'aurais plutôt fait en perl...)


 
 
ou en sed

du -s * | sort -n | sed -e 's/^\([0-9]\+\)[0-9][0-9][0-9]\([ \t].*\)/\1M\2/g'


 
Du coup c'est plus overkill, un seul "du" et ni perl ni python :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°952238
coolben
http://www.starbusiness.fr
Posté le 10-09-2007 à 21:44:40  profilanswer
 

pas mal
Merci

n°952350
matafan
Posté le 11-09-2007 à 08:30:32  profilanswer
 

Mais ca suppose qu'un mega c'est 1000 kilo.

n°952375
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 11-09-2007 à 10:00:02  profilanswer
 

matafan a écrit :

Mais ca suppose qu'un mega c'est 1000 kilo.


 
c'est sûr que niveau précision de calcul les regexp on a vu mieux  :D
 
un peu de awk ?  

du -s * | sort -n | awk -F '\t' '{
    SIZE=$1
    NAME=$2
    if (SIZE ~ /[0-9][0-9][0-9][0-9]+/ ) {  
        SIZE /= 1024
        print SIZE "M " NAME
    }
    else {
        print SIZE "K " NAME
    }
}'


 
:ange:


Message édité par Xavier_OM le 21-09-2007 à 15:44:43

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [shell] tris d'une taille

 

Sujets relatifs
shell, tester le contenu d'une variable[résolu] Comment lancer un script shell via un clic de souris ?
[mandriva 2006] Problème d'affichage des accents dans le shellrestart transfert ftp via shell
scrip shell - remplacer une ligne dans un fichier[Script shell] Debutant
Taille de la fenêtre TCP, faut-il vraiment s'en occuper ?[Résolu]Script Shell pour Rsync
Encoder une video qui change de taille[shell] Utilitaire calculant des sommes ?
Plus de sujets relatifs à : [shell] tris d'une taille


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR