Pagina 1 di 1

[RISOLTO] [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 12:27
da Savius
Salve a tutti,
sono ore che sto smanettando con un semplicissimo script che ho scritto ma, ahimé, non sono ancora riuscito a capire quale sia l'errore.
Lo script in questione dovrebbe eseguire la seguente operazione: leggere da una directory tutti i file con estensione .jar e, per ogni parola contenuta nel file "prova.txt", deve effettuare un grep per verificare se la parola è contenuta in uno di quei file jar.

Esempio:
grep -i parola file.jar

la parola non è sempre la stessa perché viene presa da un file (prova.txt) che contiene una lista di parole, e i file jar sono abbastanza. Lo script che ho elaborato dovrebbe automatizzare il processo perché con il primo ciclo for salva nella variabile file i singoli file jar che trova nella directory e con il secondo ciclo for salvo nella variabile arg le singole parole contenute nel file di testo prova.txt. Il problema sembrerebbe esser dovuto al contenuto di arg: se inserisco un echo $arg in output noto che la variabile contiene di volta in volta le parole prese dalla lista. Ma se provo a sostituire a quell'echo quest'altro echo $arg e $file non mi visualizza il valore di arg e, quando lo fa, spesso lo spezzetta e unisce i caratteri alla fine della parola restituita da file. Non so se ho reso bene l'idea, nel caso cercherò di spiegarmi meglio.

Di seguito vi posto il codice del mio script:

Codice: Seleziona tutto

#!/bin/sh

for file in `ls *.jar` 
do
	for arg in `cat prova.txt` 
	do
		grep -i $arg $file
	done
done

exit 0;
Sapreste dirmi dov'è l'errore ed, eventualmente, come risolverlo?

Re: [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 12:39
da targzeta
Posta anche un esempio di cui parli. Quello in cui fai l'echo e succede casino. Così magari si capisce meglio quello che vuoi dire. Quano dici:"se inserisco un echo $arg in output noto che la variabile contiene di volta in volta le parole prese dalla lista" vuoi dire che si comporta come dovrebbe?

Emanuele

Re: [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 12:52
da Savius
Ciao spina,
grazie per la risposta. Mi spiego meglio e ti faccio qualche esempio; quando dicevo: "fa quello che deve fare" non mi riferivo che funzionava tutto ma che, almeno il valore della variabile arg, veniva preso in maniera corretta.

Se nello script precedente inserisco un echo $arg, noterò una serie di stampe relative alle parole che di volta in volta vengono memorizzate in arg e che sono prese dal file prova.txt. Se sostituisco quell'echo ad esempio a quest'altro: echo "Argomento: $arg e File: $file" ottengo
e File: plutouto.jar
e File: plutolu.jar
e File: plutop.jar
e File: plutoto.jar
e File: plutout.jar
e File: plutop.jar
e File: plutoo.jar
Argomento: pippo e File: pluto
e File: paperinope.jar
e File: paperinor.jar
e File: paperinono.jar
e File: paperinoi.jar
e File: paperinori.jar
e File: paperinop.jar
e File: paperinoap.jar
ho inserito in grassetto le parti spezzettate del testo e dove vengono inserite.

Re: [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 13:04
da targzeta
Vediamo se ho capito bene.

Codice: Seleziona tutto

$> cat script.sh 
#!/bin/sh

for file in `ls *.jar`
do
   for arg in `cat prova.txt`
   do
       echo "Argomento: $arg e File: $file"
   done
done

exit 0

Codice: Seleziona tutto

$> ls -1 *jar
1.jar
2.jar
3.jar

Codice: Seleziona tutto

$> cat prova.txt 
pluto
pippo
minni

Codice: Seleziona tutto

$>  sh script.sh 
Argomento: pluto e File: 1.jar
Argomento: pippo e File: 1.jar
Argomento: minni e File: 1.jar
Argomento: pluto e File: 2.jar
Argomento: pippo e File: 2.jar
Argomento: minni e File: 2.jar
Argomento: pluto e File: 3.jar
Argomento: pippo e File: 3.jar
Argomento: minni e File: 3.jar
Questa esecuzione è corretta? A te questo stesso script con questi stessi file da problemi?

Emanuele

Re: [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 13:10
da Savius
Esatto, in pratica hai scritto il mio stesso codice ma senza il grep (che non funziona perché la variabile arg sembrerebbe non valorizzarsi bene). Solo che a me la stampa appare come ti ho postato in precedenza e non come quella indicata da te. :S

Re: [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 13:15
da targzeta
Scusa, potresti rifare la prova usando gli stessi identici file che uso io e postare l'output? E' tutto lì, i file .jar sono vuoti.

Emanuele

Re: [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 14:27
da Savius
Ciao spina,
scusa non avevo capito quel che mi chiedevi.

Ho fatto la prova che mi hai scritto e il risultato è identico a quello che hai postato tu:

Codice: Seleziona tutto

Argomento: pluto e File: 1.jar
Argomento: pippo e File: 1.jar
Argomento: minni e File: 1.jar
Argomento: pluto e File: 2.jar
Argomento: pippo e File: 2.jar
Argomento: minni e File: 2.jar
Argomento: pluto e File: 3.jar
Argomento: pippo e File: 3.jar
Argomento: minni e File: 3.jar
Adesso però non capisco quale sia la differenza con quel che ho scritto io e che non va... :S

Edit:
Credo di aver risolto, il problema era dovuto al tipo di file di testo.

Esempio:

Codice: Seleziona tutto

$ file prova_originale.txt
prova_originale.txt ASCII text, with CRLF line terminators

$ file prova_nuova.txt
prova_nuova.txt: ASCII text
In pratica il file di testo che stavo utilizzando aveva definiti dei terminatori particolari che nel file nuovo, creato con Vim, non ci sono. Rifacendo il test il tutto è andato a buon fine. Grazie mille per l'aiuto spina, mi hai illuminato! ^^

Re: [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 15:04
da masalapianta
per correggere i file con i terminatori di riga cr+lf (vengono creati da roba microsoft), puoi utilizzare il tool dos2unix

Re: [RISOLTO] [Bash Scripting] Quesito su cat

Inviato: gio 27 ott 2011, 15:49
da Savius
Grazie masalapianta,
prima avevo direttamente rediretto il cat al file originale in un nuovo file così da ottenere al volo un file uguale ma senza quei terminatori. Il file originale però non è stato creato da Windows perché sto utilizzando sempre Slackware, è probabile che l'editor che stavo usando (Kwrite) salvasse i file txt direttamente con quei terminatori ecco perché, creandolo invece da Vim, il risultato era diverso.

Grazie comunque per la dritta, lo ricorderò nel caso in cui mi ricapitasse questo problema! :D