Pagina 1 di 3
BASH - generare nomi files
Inviato: sab 7 mar 2009, 22:43
da danix
Ciao a tutti...
mi date una mano con uno script bash??
vorrei generare una lista di nomi strutturati in questo modo:
Codice: Seleziona tutto
testo-[0-9][0-9][0-9][0-9]-testo-000[0-9][0-9][0-9].ext
da salvare in un file di testo uno per riga... ma non ho la più pallida idea di dove cominciare...
PS
non voglio la pappa pronta, mi basta che mi indirizziate per le ricerche...
ciao ciao
Re: BASH - generare nomi files
Inviato: sab 7 mar 2009, 23:36
da sixjan
Codice: Seleziona tutto
for n in `seq 10`; do
QUATTROCIFRE=`echo $RANDOM$RANDOM | head -c4`
TRECIFRE=`echo $RANDOM$RANDOM | head -c3`
echo testo-$QUATTROCIFRE-testo-000$TRECIFRE.ext
done
Semplice e banale esempio per cominciare. Lo script genera
dieci nomi del tipo richiesto. Per salvarli su un file,
basta redirigere l'output. La variabile $RANDOM
dà un numero casuale da 0 a 32767. Io ne ho incollati due per
sicurezza, però potrebbero capitare due random da una cifra
e lo script non funzionerebbe. Bisogna aggiungere una funzione di controllo,
ma non vuoi la pappa pronta

ciao
Adesso spina scrive una riga e mi fa sentire un cretino

Re: BASH - generare nomi files
Inviato: sab 7 mar 2009, 23:43
da sixjan
oppure per non usare $RANDOM:
Codice: Seleziona tutto
for n in `seq 10`; do
QUATTROCIFRE=`head -c10 /dev/urandom | sum | head -c4`
TRECIFRE=`head -c10 /dev/urandom | sum | head -c3`
echo testo-$QUATTROCIFRE-testo-000$TRECIFRE.ext
done
Re: BASH - generare nomi files
Inviato: sab 7 mar 2009, 23:58
da targzeta
sixjan ha scritto:...Adesso spina scrive una riga e mi fa sentire un cretino

Sono molto onorato di essere considerato da te "uno che ne sa di bash script"

, ma per ora il cretino mi sento io, perchè non ho proprio capito cosa vuole ottenere danix.
Se ci potessi fare un esempio del file che vuoi ottenere danix te ne sarei grato

, ti basta, come dice sixjan numeri random e li vuoi sequenziali?
Spina
Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 10:00
da danix
grazie ragazzi, comunque si, li vorrei sequenziali, diciamo che è roba da dare in pasto a wget, quindi mi interessa che coprano tutti i range che ho imposto in maniera completa, per capirci:
da
testo-0000-testo-000000.ext
a
testo-9999-testo-000999.ext
in modo da redirigerli in un file e poi far fare al programma...

Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 10:05
da targzeta
Danix,
non è ancora chiaro. Ci sono due "contatori", come si devono incrementare? Le prime due righe devono essere:
Codice: Seleziona tutto
testo-0000-testo-000000.ext
testo-0000-testo-000001.ext
o
Codice: Seleziona tutto
testo-0000-testo-000000.ext
testo-0001-testo-000001.ext
Spina
Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 10:13
da danix
devono incrementare da destra verso sinistra, quindi si inizia da
testo-0000-testo-000000.ext
testo-0000-testo-000001.ext
[...]
testo-0000-testo-000998.ext
testo-0000-testo-000999.ext
testo-0001-testo-000000.ext
testo-0001-testo-000001.ext
ecc...
spero di essermi spiegato meglio ora...

Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 10:28
da raffaele181188
Guarda, secondo me ti basta una variabile $counter. Quindi una cosa del tipo
Codice: Seleziona tutto
#sei sicuro di aver descritto bene? Mi sembra che ci vorranno un milione di cicli in totale...
for $counter in [0-1000!!!] do;
for $number in [0-999] do;
vabbe di bash scripting non me ne intendo, penso che si capisca da qui in avanti... :-)
echo tipo text-$counter(formattato opportunamente)-text-$number(formattato).txt
done
done
Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 11:19
da sixjan
Un esempio per fare quello che dici tu:
Codice: Seleziona tutto
#/bin/bash
MAX=10
COUNT=0
for QUATTROCIFRE in `seq -w 0 9999`; do
for TRECIFRE in `seq -w 0 999`; do
echo testo-$QUATTROCIFRE-testo-000$TRECIFRE.ext
let COUNT=$COUNT+1
[[ $COUNT == $MAX ]] && exit
done
done
ciao
Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 11:22
da danix
non conoscevo seq...

ora gli do un'occhiata... grazie mille dell'hint...

Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 11:29
da Mario Vanoni
Ed invece di un
echo testo-$QUATTROCIFRE-testo-000$TRECIFRE.ext
usa printf(1) dei coreutils.
Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 11:54
da danix
grazie anche a te Mario, vedrò quello che riesco a tirare fuori

Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 11:56
da targzeta
Tanto per dire la mia, il comando di sixjan è equivalente a questo:
Codice: Seleziona tutto
for seq in `seq -w 0 9999999`;
do echo "testo-${seq:0:4}-testo-000${seq:4}";
done
solo che....bhé e interessante quello che succede

. Analizzate con conky il consumo di risorse (memoria, processore), e se lo interrompete (come farete sicuramente) killate la shell sulla quale lo eseguite altrimenti non viene rilasciata la memoria allocata.
Spina
Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 12:11
da danix
purtroppo ho notato...

mi sa che devo ridurre (di molto) il range...
Re: BASH - generare nomi files
Inviato: dom 8 mar 2009, 12:15
da Mario Vanoni
spina ha scritto:Tanto per dire la mia, il comando di sixjan è equivalente a questo:
Codice: Seleziona tutto
for seq in `seq -w 0 9999999`;
do echo "testo-${seq:0:4}-testo-000${seq:4}";
done
solo che....bhé e interessante quello che succede

. Analizzate con conky il consumo di risorse (memoria, processore), e se lo interrompete (come farete sicuramente) killate la shell sulla quale lo eseguite altrimenti non viene rilasciata la memoria allocata.
Spina
Perfetto se togli i due punto e virgola (;) finali.
time .z >> .zz
4m21.804s
file di 10'000'000 righe.
Con Ctrl-C puoi interrompere.