Repository 32bit  Forum
Repository 64bit  Wiki

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.

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
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

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

sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 407
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 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
targzeta
Iper Master
Iper Master
 
Messaggi: 6163
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

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... ;)
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

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

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
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

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
Avatar utente
raffaele181188
Packager
Packager
 
Messaggi: 789
Iscritto il: ven set 07, 2007 20:40
Località: DearSkin (FG)
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu

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
sixjan
Linux 2.4
Linux 2.4
 
Messaggi: 407
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 danix » dom mar 08, 2009 11:22

non conoscevo seq... ;) ora gli do un'occhiata... grazie mille dell'hint... :D
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

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.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

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
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

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

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...
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

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.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Yahoo [Bot] e 1 ospite