Re: Aiuto sintassi in bash
Inviato: giovedì 19 giugno 2014, 18:57
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
Il forum della comunità italiana di Ubuntu.
https://forum.ubuntu-it.org/
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
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
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
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
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 barCodice: Seleziona tutto
cat *.ped | cut -c1-200 | awk '($3 !=0 || $4!=0) { print $3, $4 }' > lista_figli-IDs_totali.txtHo dovuto riavviare ed ora va! -.- grazie mille davverovaeVictis [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: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$ 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.pedCon il comando che ti ho indicato (a parte la redirezione nel file di output) si ottieneCodice: 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 9Ora, 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 foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bare infattiCodice: 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.txtedit: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
dopo rifaccio tutto con dei file con le prime due colonne distinguibili, in modo che sia più chiaro
Ottimo[...] ed ora va [...]
Il comando cat è sicuramente ridondante perché cut accetta i file come input.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