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
[RISOLTO]Aiuto sintassi in bash
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Aiuto sintassi in bash
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
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Aiuto sintassi in bash
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, è:
Con il comando che ti ho indicato (a parte la redirezione nel file di output) si ottiene
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:
e infatti
edit:
dopo rifaccio tutto con dei file con le prime due colonne distinguibili, in modo che sia più chiaro
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
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 bardopo rifaccio tutto con dei file con le prime due colonne distinguibili, in modo che sia più chiaro
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: Aiuto sintassi in bash
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.txtSalva l'Ucraina! 
- cloudany
- Prode Principiante
- Messaggi: 121
- Iscrizione: domenica 28 febbraio 2010, 12:54
- Desktop: Unity
- Distribuzione: Ubuntu
Re: Aiuto sintassi in bash
Ho 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
" 4 letters are enough to explain mankind"
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Aiuto sintassi in bash
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
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
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Aiuto sintassi in bash
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!.
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!.
Salva l'Ucraina! 
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 7 ospiti