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" :oops:, 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
:D

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... :D

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... :D

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 :D

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.