BASH - generare nomi files

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

BASH - generare nomi files

Messaggioda danix » sab mar 07, 2009 22:43

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
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

sixjan
Linux 2.4
Linux 2.4
Messaggi: 413
Iscritto il: dom gen 06, 2008 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: BASH - generare nomi files

Messaggioda sixjan » sab mar 07, 2009 23:36

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 :-)
Ultima modifica di sixjan il dom mar 08, 2009 0:27, modificato 1 volta in totale.

sixjan
Linux 2.4
Linux 2.4
Messaggi: 413
Iscritto il: dom gen 06, 2008 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: BASH - generare nomi files

Messaggioda sixjan » sab mar 07, 2009 23:43

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


Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6388
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: BASH - generare nomi files

Messaggioda targzeta » sab mar 07, 2009 23:58

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

Re: BASH - generare nomi files

Messaggioda danix » dom mar 08, 2009 10:00

: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... ;)
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6388
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: BASH - generare nomi files

Messaggioda targzeta » dom mar 08, 2009 10:05

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

Re: BASH - generare nomi files

Messaggioda danix » dom mar 08, 2009 10:13

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
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

Re: BASH - generare nomi files

Messaggioda raffaele181188 » dom mar 08, 2009 10:28

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

sixjan
Linux 2.4
Linux 2.4
Messaggi: 413
Iscritto il: dom gen 06, 2008 11:46
Slackware: 14.1
Kernel: 3.10.17-smp
Desktop: Xfce 4.10

Re: BASH - generare nomi files

Messaggioda sixjan » dom mar 08, 2009 11:19

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

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

Re: BASH - generare nomi files

Messaggioda danix » dom mar 08, 2009 11:22

non conoscevo seq... ;) ora gli do un'occhiata... grazie mille dell'hint... :D
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: BASH - generare nomi files

Messaggioda Mario Vanoni » dom mar 08, 2009 11:29

Ed invece di un

echo testo-$QUATTROCIFRE-testo-000$TRECIFRE.ext

usa printf(1) dei coreutils.

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

Re: BASH - generare nomi files

Messaggioda danix » dom mar 08, 2009 11:54

grazie anche a te Mario, vedrò quello che riesco a tirare fuori :D
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6388
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: BASH - generare nomi files

Messaggioda targzeta » dom mar 08, 2009 11:56

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

Re: BASH - generare nomi files

Messaggioda danix » dom mar 08, 2009 12:11

purtroppo ho notato... :( mi sa che devo ridurre (di molto) il range...
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: BASH - generare nomi files

Messaggioda Mario Vanoni » dom mar 08, 2009 12:15

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.


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite