Repository 32bit  Forum
Repository 64bit  Wiki

[RISOLTO] [Bash Scripting] Quesito su cat

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.

[RISOLTO] [Bash Scripting] Quesito su cat

Messaggioda Savius » gio ott 27, 2011 11:27

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?
Ultima modifica di Savius il gio ott 27, 2011 13:59, modificato 1 volta in totale.
Avatar utente
Savius
Linux 2.6
Linux 2.6
 
Messaggi: 553
Iscritto il: gio ago 14, 2008 12:45
Località: Napoli
Slackware: Slackware64 14.0
Kernel: 3.2.29-smp
Desktop: KDE 4.8.5

Re: [Bash Scripting] Quesito su cat

Messaggioda targzeta » gio ott 27, 2011 11:39

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
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 Scripting] Quesito su cat

Messaggioda Savius » gio ott 27, 2011 11:52

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.
Avatar utente
Savius
Linux 2.6
Linux 2.6
 
Messaggi: 553
Iscritto il: gio ago 14, 2008 12:45
Località: Napoli
Slackware: Slackware64 14.0
Kernel: 3.2.29-smp
Desktop: KDE 4.8.5

Re: [Bash Scripting] Quesito su cat

Messaggioda targzeta » gio ott 27, 2011 12:04

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
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 Scripting] Quesito su cat

Messaggioda Savius » gio ott 27, 2011 12:10

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
Avatar utente
Savius
Linux 2.6
Linux 2.6
 
Messaggi: 553
Iscritto il: gio ago 14, 2008 12:45
Località: Napoli
Slackware: Slackware64 14.0
Kernel: 3.2.29-smp
Desktop: KDE 4.8.5

Re: [Bash Scripting] Quesito su cat

Messaggioda targzeta » gio ott 27, 2011 12:15

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
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 Scripting] Quesito su cat

Messaggioda Savius » gio ott 27, 2011 13:27

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! ^^
Avatar utente
Savius
Linux 2.6
Linux 2.6
 
Messaggi: 553
Iscritto il: gio ago 14, 2008 12:45
Località: Napoli
Slackware: Slackware64 14.0
Kernel: 3.2.29-smp
Desktop: KDE 4.8.5

Re: [Bash Scripting] Quesito su cat

Messaggioda masalapianta » gio ott 27, 2011 14:04

per correggere i file con i terminatori di riga cr+lf (vengono creati da roba microsoft), puoi utilizzare il tool dos2unix
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

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

Messaggioda Savius » gio ott 27, 2011 14:49

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
Avatar utente
Savius
Linux 2.6
Linux 2.6
 
Messaggi: 553
Iscritto il: gio ago 14, 2008 12:45
Località: Napoli
Slackware: Slackware64 14.0
Kernel: 3.2.29-smp
Desktop: KDE 4.8.5


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite