OVH Cloud OVH Cloud

prendre un fichier aleatoirement en bash

4 réponses
Avatar
octane
Bonjour,

J'ai 9999 fichiers, appel=E9s de
F0001 =E0 F9999

Je souhaite =E0 l'aide d'un script bash en choisir un au hasard,
v=E9rifier s'il est vide pour effectuer une action au cas ou.

Si j'=E9cris:

fichier=3D$((RANDOM%9999))
echo le fichier est le F$fichier

je ne toucherai pas les fichiers F0*, puisque je risque
d'obtenir des F12 au lieu de F0012 par exemple.

Je pourrais ajouter des 0 avec des echo -n $fichier | wc -m
mais cela me parait lourd comme m=E9thode. Et d'ailleurs
comment ajouter n caracteres a une variable?

Y'a t'il plus rapide et/ou plus elegant?

Merci

4 réponses

Avatar
Thierry Boudet
On 2005-12-13, wrote:

Y'a t'il plus rapide et/ou plus elegant?



:~$ printf "%04dn" $((RANDOM%9999))
0622



--
Quels indicateurs devrait-on mesurer pour tenter de déterminer un
"indice de viscosité" raisonnable par rapport à la fréquentation
moyenne de usenet-fr, ou -si du moins c'est pertinent- à celle de fufe ?
--{ mécanique des fufluides }--

Avatar
Stephane Chazelas
2005-12-13, 09:33(-08), :
Bonjour,

J'ai 9999 fichiers, appelés de
F0001 à F9999

Je souhaite à l'aide d'un script bash en choisir un au hasard,
vérifier s'il est vide pour effectuer une action au cas ou.

Si j'écris:

fichier=$((RANDOM%9999))
echo le fichier est le F$fichier

je ne toucherai pas les fichiers F0*, puisque je risque
d'obtenir des F12 au lieu de F0012 par exemple.

Je pourrais ajouter des 0 avec des echo -n $fichier | wc -m
mais cela me parait lourd comme méthode. Et d'ailleurs
comment ajouter n caracteres a une variable?

Y'a t'il plus rapide et/ou plus elegant?


fichier=$(printf 'F%04d' "$(($RANDOM % 10000))")


--
Stéphane

Avatar
fred
fichier=$(printf 'F%04d' "$(($RANDOM % 10000))")


bonjour,
de manière plus générale, comment padder à gauche ou à droite ?
ici on a un nombre à 4 chiffres mais si on avait eu une chaine de caractères
?
Supposons que j'ai une chaîne $toto, je veux l'afficher sur 50 caractères et
compléter par des '#' à gauche si elle fait moins de 50 caractères.
Comment procéder ?

Avatar
Stephane Chazelas
2005-12-14, 10:10(+01), fred:

fichier=$(printf 'F%04d' "$(($RANDOM % 10000))")


bonjour,
de manière plus générale, comment padder à gauche ou à droite ?
ici on a un nombre à 4 chiffres mais si on avait eu une chaine de caractères
?
Supposons que j'ai une chaîne $toto, je veux l'afficher sur 50 caractères et
compléter par des '#' à gauche si elle fait moins de 50 caractères.
Comment procéder ?



Avec zsh:

toto=${(l:50::#:)toto}

Sinon,

toto=$(awk '
BEGIN {
s=ARGV[1]
while(length(s) < 50)
s = "#" s
print s
exit
}' "$toto")

ou:

toto="##################################################$toto"
toto=${toto#"${toto%??????????????????????????????????????????????????}"}

(mais ce dernier peut tronquer $toto s'il fait plus de 50
caracteres au depart).

--
Stéphane