|
|||||||
|
|
|
![]() |
|
|
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 18: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: 21:08.




















