|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Piccolo aiuto con uno script
Devo scrivere un piccolo script di shell, che partendo da un file in questo formato:
Codice:
V000001...................................... V000001...................................... V000001...................................... B000001...................................... B000001...................................... v000002...................................... B000002...................................... B000002...................................... v000002...................................... B000003...................................... B000003...................................... v000003...................................... B000003...................................... B000004...................................... v000004...................................... B000005...................................... B000005...................................... v00000n...................................... file000001: Codice:
V000001...................................... V000001...................................... V000001...................................... B000001...................................... B000001...................................... Codice:
v000002...................................... B000002...................................... B000002...................................... v000002...................................... Codice:
v00000n...................................... Mi potreste dire come fare a ricercare la stringa nel file ed a copiare l'intera riga in un altro file? Il resto dello script vorrei provare a scriverlo da solo... Grazie ![]()
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
![]() |
![]() |
![]() |
#2 | |||
Member
Iscritto dal: Oct 2006
Messaggi: 88
|
Quote:
Metto il tag spoiler se non vuoi vedere lo script completo.
Vedi un po' se funge... non l'ho testato. Ultima modifica di Franco2 : 21-06-2007 alle 17:08. |
|||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Grazie per la risposta!
![]() Ho provato il tuo script, ma non ottengo ciò che vorrei. Così com'è, lo script mi genera tanti file quante sono le righe e, mi sembra, anche per le colonne. ![]() Forse mi sbaglio, ma credo che ti abbiano confuso quei puntini che ho inserito descrivendo il file. Il file in questione è a formato fisso a 185 colonne e comprenden vari caratteri e spazi. Ecco un esempio reale Codice:
V0000013605015SUCCO F.JOLLY PESCAX3 BRML0200 003158158005JOLLY X 3 8 53 8520MLLT 0,600 12 11 8002700219203 0 01 0 0 0 0 0 ![]()
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Oct 2006
Messaggi: 88
|
Forse ho capito. Riprova così:
Codice:
#!/bin/bash FILE_DI_PARTENZA=$1 for a in $(cat $FILE_DI_PARTENZA) do echo $a >> file$(echo $a | cut -c 2-7) done |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
No, purtroppo lo script continua a generare 1 file per ogni riga ed ogni colonna. A me, invece, servirebbe un unico file in cui sono compiate tutte le righe con lo stesso codice (il codice sono i 6 caratteri dopo la V o la B)
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Oct 2006
Messaggi: 88
|
Quote:
Codice:
#!/bin/bash IFS_BAK=$IFS IFS=$'\n' FILE_DI_PARTENZA=$1 for a in $(cat $FILE_DI_PARTENZA) do echo $a >> file$(echo $a | cut -c 2-7) done IFS=$IFS_BAK |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
Quote:
innanzitutto non sappiamo a priori quanti sono i codici. sappiamo solo che ogni codice e' formato da una lettera (che ci e' indifferente se ho capito bene) e 6 cifre. per cui dobbiamo selezionare tutti i codici numerici in un file e poi splittare in tanti file con ogni codice con questo file di test: Codice:
gianluca@gurutech:~$ cat test V000001ASDJHWIUJCNJ V000002ASDJHWIUJCNJ V000003ASDJHWIUJCNJ V000001ASDJHWIUJCNJ B000001ASDJHWIUJCNJ B000002ASDJHWIUJCNJ Codice:
gianluca@gurutech:~$ cat parse.sh #!/bin/bash # prendo l'inizio della riga, cerco una lettera e sei cifre # scarto il resto tengo solo le cifre e le riordino per codici unici cat test | sed -e "s/^[A-Za-z]\([0-9]\{6\}\).*/\1/" | sort -g | uniq | while read CODICE; do { # cerco tutto quello con quel codice e lo butto in un file cat test | egrep "^[A-Za-z]$CODICE" > cod$CODICE.txt } done Codice:
gianluca@gurutech:~$ cat cod000001.txt V000001ASDJHWIUJCNJ V000001ASDJHWIUJCNJ B000001ASDJHWIUJCNJ gianluca@gurutech:~$ cat cod000002.txt V000002ASDJHWIUJCNJ B000002ASDJHWIUJCNJ gianluca@gurutech:~$ cat cod000003.txt V000003ASDJHWIUJCNJ
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
gurutech> il tuo approccio se il file è grosso è molto lento perchè rifai lo scan del file n+1 volte (dove n è il numero dei codici). dato che tutte le informazioni di cui hai bisogno per "decidere" il file in cui mettere la riga sono contenute nella riga stessa è inutile.
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
Quote:
io ho scelto l'approccio a blocchi perchè mi pare più veloce. tu come faresti?
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
comunque ho detto una cavolata e me ne scuso. l'approccio di Franco2 e' perfettamente funzionante...
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Quote:
![]() ![]() Non credevo fosse così semplice ![]() ![]() Comunque....devo proprio mettermi a studiare un po' di programmazione bash ![]() ![]() Grazie per l'aiuto! ![]()
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
proprio come dici tu, appendendo le righe a file di volta in volta differenti. penso che come prestazioni sia migliore su file lunghi. funzionalmente anche la tua soluzione è buona (ma è più da programmatore, non me la sari aspettata da te ![]() |
|
![]() |
![]() |
![]() |
#13 | |
Member
Iscritto dal: Oct 2006
Messaggi: 88
|
Quote:
Poi, con l'ultima riga, lo si reimposta alla definizione standard. |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
|
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Oct 2006
Messaggi: 88
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:53.