[RISOLTO]Aiuto sintassi in bash

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Aiuto sintassi in bash

Messaggio 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 :)
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.»
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Aiuto sintassi in bash

Messaggio 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 :)
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.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio 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
Salva l'Ucraina! 🇺🇦
Avatar utente
cloudany
Prode Principiante
Messaggi: 121
Iscrizione: domenica 28 febbraio 2010, 12:54
Desktop: Unity
Distribuzione: Ubuntu

Re: Aiuto sintassi in bash

Messaggio 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
" 4 letters are enough to explain mankind"
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Aiuto sintassi in bash

Messaggio 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:
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.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio 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!.
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti