script liste de fichiers - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 17-04-2007 à 10:49:25
le simplifier par sed, c'est possible mais pas maintenable donc, j'arrête
par contre, il y a moyen de le simplifier un peu:
awk '{ split($0, s, "." ); print s[length(s)]; }' |
devient
awk '{ n=split($0, s, "." ); print s[n]; }' |
'oilà
donc au bout du compte j'ai dans listFile.sh :
Code :
|
Marsh Posté le 17-04-2007 à 11:13:08
A titre purement informatif, moi je fais ça comme ça :
#!/bin/sh
FILTER="| sed 's/.*\.//g' | sort | uniq -c | sort -n" eval "$SEARCH" "$FILTER" |
Marsh Posté le 17-04-2007 à 11:17:28
intéressant ça. je teste ce soâr
Marsh Posté le 17-04-2007 à 22:31:39
en effet, je préfère mettre "sed 's/.*\.//g'" en lieu et place de mon premier awk, ça me paraît moins long à exécuter (même si ça trace vu le peu de fichiers )
edit> tout compte fait, les commandes unix c'est comme le SQL, plus on en fait plus on trouve des astuces
Marsh Posté le 20-04-2007 à 13:07:28
un update histoire de gérer la casse des caractères
#!/bin/bash |
Marsh Posté le 16-04-2007 à 22:28:28
'lut,
je suis en train d'écrire des petits scripts afin d'améliorer mon utilisation des commandes de base.
j'arrive à un nouveau step: awk
en ayant ça dans un répertoire:
cfd@seagull /common/temp $ ls
f1.txt f2.mp3 f3.avi f4.mp3 f5.txt
voilà ce à quoi je voudrais arriver:
cfd@seagull /common/temp $ <...>
1 avi, 2 mp3 and 2 txt file(s)
(en gros, c'est pour taper l'output dans conky)
pour l'instant j'ai ça:
cfd@seagull /common/temp $ ls | grep \\. | cut -d. -f2 | sort | uniq -c | awk '{ printf "%s %s, ", $1, $2;} END { print ""}'
1 avi, 2 mp3, 2 txt,
mais j'ai un peu de mal
à trouver la dernière ligne courante mangée par awk afin de placer le 'and' et le 'file(s)' (le script awk)ls | grep \\. | cut -d. -f2 | sort | uniq -c | awk '{ out= out ";" $1 " " $2} END { print out; split(out, segments,";" ); if(length(segments)==0)exit; printf "%s", segments[2]; if(length(segments)>2) { i=3; for (; i<length(segments); i++) printf ", %s", segments[i]; printf " and %s ", segments[i];} print "file(s)" }'
1 avi, 2 mp3 and 2 txt file(s)
à ce que ça marche si j'ai des fichiers contenant des . dans le nom en plus de la séparation avec l'extension (le cut qui est limite)ls -X1 $1 | awk '{ split($0, s, "." ); print s[length(s)]; }' | uniq -c | awk '{ out= out ";" $1 " " $2} END { split(out, segments,";" ); if(length(segments)==0)exit; printf "%s", segments[2]; if(length(segments)>2) { i=3; for (; i<length(segments); i++) printf ", %s", segments[i]; printf " and %s ", segments[i];} print "file(s)" }'
Qq'un pour simplifier le premier awk avec sed ? car je n'y arrive pô
Message édité par TBone le 16-04-2007 à 23:59:14
---------------
A straight line is a special case of a curve. It's a curve which is uncurved. -- Susskind.