Pagina 2 di 2

Re: Aiuto sintassi in bash

Inviato: giovedì 19 giugno 2014, 18:57
da vaeVictis

Postami un esempio di riga (non tutta eh, basta una parte della riga), così mi creo un paio di file sul mio computer con quella riga, faccio un paio di prove e risolviamo :)

Re: Aiuto sintassi in bash

Inviato: giovedì 19 giugno 2014, 19:13
da vaeVictis
Siccome devo staccare e non so tra quanto mi connetto nuovamente, ti lascio l'illustrazione di come ho fatto i controlli sul mio computer.

Allora, nella cartella in cui mi trovo ho i seguenti tre file:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ ls
totale 12K
-rw-rw-r-- 1 vaevictis vaevictis 70 giu 19 19:00 bar.ped
-rw-rw-r-- 1 vaevictis vaevictis 70 giu 19 19:00 foo.ped
-rw-rw-r-- 1 vaevictis vaevictis 70 giu 19 19:00 foobar.ped
Il contenuto dei file, che mi sono creato più o meno facendo riferimento a quanto mi hai indicato, è:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat bar.ped 
foo bar 0 0 9
foo bar 0 1 9
foo bar 2 1 9
foo bar 2 0 9
foo bar 2 2 9
vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat foo.ped 
foo bar 0 0 9
foo bar 0 1 9
foo bar 2 1 9
foo bar 2 0 9
foo bar 2 2 9
vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat foobar.ped 
foo bar 0 0 9
foo bar 0 1 9
foo bar 2 1 9
foo bar 2 0 9
foo bar 2 2 9
Con il comando che ti ho indicato (a parte la redirezione nel file di output) si ottiene

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ for FILE in *.ped; do cut -c1-200 $FILE | awk '{ if($3 != 0 || $4 != 0) print $1" "$2  }' ; done
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
Ora, se io scelgo per esempio di mettere questa roba qui sopra in un file di nome file_di_output nella stessa directory in cui sto, do il comando:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ for FILE in *.ped; do cut -c1-200 $FILE | awk '{ if($3 != 0 || $4 != 0) print $1" "$2  }' ; done >> file_di_output.txt
e infatti

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat file_di_output.txt 
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
edit:
dopo rifaccio tutto con dei file con le prime due colonne distinguibili, in modo che sia più chiaro :)

Re: Aiuto sintassi in bash

Inviato: giovedì 19 giugno 2014, 19:25
da UbuNuovo
ma usare solo cat con il globbing? Dovrebbe bastare questo.

Codice: Seleziona tutto

cat *.ped | cut -c1-200 | awk '($3 !=0 || $4!=0) { print $3, $4 }' > lista_figli-IDs_totali.txt

Re: Aiuto sintassi in bash

Inviato: giovedì 19 giugno 2014, 19:30
da cloudany
vaeVictis [url=http://forum.ubuntu-it.org/viewtopic.php?p=4602566#p4602566][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Siccome devo staccare e non so tra quanto mi connetto nuovamente, ti lascio l'illustrazione di come ho fatto i controlli sul mio computer.

Allora, nella cartella in cui mi trovo ho i seguenti tre file:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ ls
totale 12K
-rw-rw-r-- 1 vaevictis vaevictis 70 giu 19 19:00 bar.ped
-rw-rw-r-- 1 vaevictis vaevictis 70 giu 19 19:00 foo.ped
-rw-rw-r-- 1 vaevictis vaevictis 70 giu 19 19:00 foobar.ped
Il contenuto dei file, che mi sono creato più o meno facendo riferimento a quanto mi hai indicato, è:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat bar.ped 
foo bar 0 0 9
foo bar 0 1 9
foo bar 2 1 9
foo bar 2 0 9
foo bar 2 2 9
vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat foo.ped 
foo bar 0 0 9
foo bar 0 1 9
foo bar 2 1 9
foo bar 2 0 9
foo bar 2 2 9
vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat foobar.ped 
foo bar 0 0 9
foo bar 0 1 9
foo bar 2 1 9
foo bar 2 0 9
foo bar 2 2 9
Con il comando che ti ho indicato (a parte la redirezione nel file di output) si ottiene

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ for FILE in *.ped; do cut -c1-200 $FILE | awk '{ if($3 != 0 || $4 != 0) print $1" "$2  }' ; done
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
Ora, se io scelgo per esempio di mettere questa roba qui sopra in un file di nome file_di_output nella stessa directory in cui sto, do il comando:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ for FILE in *.ped; do cut -c1-200 $FILE | awk '{ if($3 != 0 || $4 != 0) print $1" "$2  }' ; done >> file_di_output.txt
e infatti

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Programmazione/Bash$ cat file_di_output.txt 
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
foo bar
edit:
dopo rifaccio tutto con dei file con le prime due colonne distinguibili, in modo che sia più chiaro :)
Ho dovuto riavviare ed ora va! -.- grazie mille davvero

Re: Aiuto sintassi in bash

Inviato: giovedì 19 giugno 2014, 19:49
da vaeVictis
[...] ed ora va [...]
Ottimo :)
UbuNuovo [url=http://forum.ubuntu-it.org/viewtopic.php?p=4602580#p4602580][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ma usare solo cat con il globbing? Dovrebbe bastare questo.

Codice: Seleziona tutto

cat *.ped | cut -c1-200 | awk '($3 !=0 || $4!=0) { print $3, $4 }' > lista_figli-IDs_totali.txt
Il comando cat è sicuramente ridondante perché cut accetta i file come input.
Per il resto credo tu abbia ragione.
Era quello che intendevo quando dicevo che il ciclo for si poteva eliminare... poi mi sono perso l'idea per strada :)

:ciao:

Re: [RISOLTO]Aiuto sintassi in bash

Inviato: venerdì 20 giugno 2014, 2:32
da UbuNuovo
Sorry, sono tornato ora.
Si, mi ero accorto della possibilità ma per leggibilità e visto che si va su pipe ho impostato la riga di codice in quel modo.
Per quanto riguarda awk si potrebbero levare anche le parentesi tonde, e la sintassi sarebbe corretetta ugualmente, awk accetta, come gli script bash (e come tanti altri linguaggi), la notazione "condizione ||" o "condizione &&"; comunque la base di awk è: "condizione {comando} ...(ora non mi viene la parola corretta) . (awk è una meraviglia!)
Anch'io preferisco usare la forma con "if" perchè più esplicativa.
Per i miei script uso la forma breve, se devo spiegare uno script, no!, mai!.