TBone Pouet. | '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.
|