[SH] Aiuto con grep

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Fabio1989
Prode Principiante
Messaggi: 151
Iscrizione: domenica 1 novembre 2009, 22:26

[SH] Aiuto con grep

Messaggio da Fabio1989 »

Salve a tutti,
ho un problema con la grep.

Praticamente devo costruire un file .sh che faccia la grep di n righe che hanno una parte di grep comune ed una parte no.
Cerco di chiarire:

Codice: Seleziona tutto

TN: .... PARAMETERS:
TN: .... INPUT:
TN: .... OUTPUT:
TN: .... RESPONSE:
Il mio scopo è avere una grep che:
1) estragga tutte le righe del file aventi la parte comune (TN:) e che vada in "AND" con la "OR" della parte variabile (PARAMETERS:, INPUT:, OUTPUT:,RESPONSE: ), quindi, per farla breve, tutte le righe aventi TN ed uno tra PARAMETERS:, INPUT:, OUTPUT:, RESPONSE: .
2) tale estrazione deve essere inserita in un file mantenendo l'ordinamento delle righe (es: se c'era prima la riga PARAMETERS e poi la RESPONSE, va mantenuto quest'ordine)
3) capire come fare la duale di questa grep, ovvero prendere tutti i record che sono stati esclusi dalla precedente grep e convogliarli in un altro file.

Grazie, Fabio.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [SH] Aiuto con grep

Messaggio da vaeVictis »

Fai un esempio di file contenente sia righe che devi prendere sia righe che devi scartare.
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: [SH] Aiuto con grep

Messaggio da vaeVictis »

Facciamo che intanto ti posto i comandi, poi mi dici se era quello che intendevi:

Il file contiene queste righe:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ cat foo.txt 
TN: .... PARAMETERS:
TN: .... NON VA BENE:
TN: .... INPUT:
TN: .... NON VA BENE PE GNENTE PROPRIO:
TN: .... OUTPUT:
TN: .... AO MA NON HAI CAPITO CHE NON VABBBBBENE?:
TN: .... RESPONSE:
Fabio1989 ha scritto:1) estragga tutte le righe del file aventi la parte comune (TN:) e che vada in "AND" con la "OR" della parte variabile (PARAMETERS:, INPUT:, OUTPUT:,RESPONSE: ), quindi, per farla breve, tutte le righe aventi TN ed uno tra PARAMETERS:, INPUT:, OUTPUT:, RESPONSE: .

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ grep -E "^TN:.*(PARAMETERS|RESPONSE|INPUT|OUTPUT):.*" foo.txt 
TN: .... PARAMETERS:
TN: .... INPUT:
TN: .... OUTPUT:
TN: .... RESPONSE:
Fabio1989 ha scritto:2) tale estrazione deve essere inserita in un file mantenendo l'ordinamento delle righe (es: se c'era prima la riga PARAMETERS e poi la RESPONSE, va mantenuto quest'ordine)
Ti fai una ricerca online... si usa la "redirezione dell'output di un comando su file" (usa proprio queste parole nella ricerca)
Fabio1989 ha scritto:3) capire come fare la duale di questa grep, ovvero prendere tutti i record che sono stati esclusi dalla precedente grep e convogliarli in un altro file.

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ grep -vE "^TN:.*(PARAMETERS|RESPONSE|INPUT|OUTPUT):.*" foo.txt 
TN: .... NON VA BENE:
TN: .... NON VA BENE PE GNENTE PROPRIO:
TN: .... AO MA NON HAI CAPITO CHE NON VABBBBBENE?:
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.»
Fabio1989
Prode Principiante
Messaggi: 151
Iscrizione: domenica 1 novembre 2009, 22:26

Re: [SH] Aiuto con grep

Messaggio da Fabio1989 »

vaeVictis [url=http://forum.ubuntu-it.org/viewtopic.php?p=4602983#p4602983][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Fai un esempio di file contenente sia righe che devi prendere sia righe che devi scartare.
Certo, eccolo:

Codice: Seleziona tutto

Righe da acquisire
2014-06-19 00:04:26,370  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] Start paperino. PARAMETERS:test=123
2014-06-19 00:04:26,641  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] pluto#minnie INPUT:test=456
2014-06-19 00:04:32,525  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] pluto#minnie EXECUTION TIME: 5946 ms. OUTPUT:test=654
2014-06-19 00:04:32,553  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] End paperino. EXECUTION TIME:6169ms. RESPONSE:321

Codice: Seleziona tutto

Righe da scartare
2014-06-19 00:04:26,371  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] ||||test@test.it|ciccio|||test|cc||test12|||||||||dv-bb||||||||||||||||
2014-06-19 00:04:26,372  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] Channel da asb = 'test' mappato con boughtFrom = '41'
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [SH] Aiuto con grep

Messaggio da vaeVictis »

I comandi che ti ho postato vanno modificati, perché "TN" non è a inizio riga come avevo capito.

Mettendo tutte le righe in un file, puoi dare i comandi:

1)

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ grep -E " TN:.*(PARAMETERS|RESPONSE|INPUT|OUTPUT):.*" foo.txt 
2014-06-19 00:04:26,370  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] Start paperino. PARAMETERS:test=123
2014-06-19 00:04:26,641  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] pluto#minnie INPUT:test=456
2014-06-19 00:04:32,525  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] pluto#minnie EXECUTION TIME: 5946 ms. OUTPUT:test=654
2014-06-19 00:04:32,553  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] End paperino. EXECUTION TIME:6169ms. RESPONSE:321
3)

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ grep -vE " TN:.*(PARAMETERS|RESPONSE|INPUT|OUTPUT):.*" foo.txt 
2014-06-19 00:04:26,372  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] Channel da asb = 'test' mappato con boughtFrom = '41'
2014-06-19 00:04:26,371  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] ||||test@test.it|ciccio|||test|cc||test12|||||||||dv-bb||||||||||||||||
Il punto 2) lo trovi facilmente online :)
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.»
Fabio1989
Prode Principiante
Messaggi: 151
Iscrizione: domenica 1 novembre 2009, 22:26

Re: [SH] Aiuto con grep

Messaggio da Fabio1989 »

vaeVictis [url=http://forum.ubuntu-it.org/viewtopic.php?p=4602999#p4602999][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:I comandi che ti ho postato vanno modificati, perché "TN" non è a inizio riga come avevo capito.

Mettendo tutte le righe in un file, puoi dare i comandi:

1)

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ grep -E " TN:.*(PARAMETERS|RESPONSE|INPUT|OUTPUT):.*" foo.txt 
2014-06-19 00:04:26,370  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] Start paperino. PARAMETERS:test=123
2014-06-19 00:04:26,641  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] pluto#minnie INPUT:test=456
2014-06-19 00:04:32,525  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] pluto#minnie EXECUTION TIME: 5946 ms. OUTPUT:test=654
2014-06-19 00:04:32,553  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] End paperino. EXECUTION TIME:6169ms. RESPONSE:321
3)

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ grep -vE " TN:.*(PARAMETERS|RESPONSE|INPUT|OUTPUT):.*" foo.txt 
2014-06-19 00:04:26,372  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] Channel da asb = 'test' mappato con boughtFrom = '41'
2014-06-19 00:04:26,371  INFO (...)| TN: 1179597967251722 | TAN: test@test.it | ACTION:pippo | ID_FLOW:385|[6230] ||||test@test.it|ciccio|||test|cc||test12|||||||||dv-bb||||||||||||||||
Il punto 2) lo trovi facilmente online :)
Grandissimo! Funziona! :D
Volevo chiedere un ulteriore aiuto, se possibile.

Queste grep vanno applicate ad n file di cui non so il nome preciso; avevo pensato ad una cosa del genere ma mi concatena anche il path del file (mentre a me serve solo il nome) :

Codice: Seleziona tutto

for fileDaGreppare in path1/nomeFile.log* #(ci sarà una parte variabile dopo ".log")
	do
	
		### Backup file
		mv path1/$fileDaGreppare path2/$fileDaGreppare.backup

	done
Poi sulla variabile "fileDaGreppare" dovrei appunto fare la grep ed inserirla in un file; potrebbe darmi problema se concateno alle grep che mi hai prodotto la notazione:

Codice: Seleziona tutto

grep -E " TN:.*(PARAMETERS|RESPONSE|INPUT|OUTPUT):.*" $fileDaGreppare > $fileDaGreppare.grep
Grazie infinite,
Fabio.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [SH] Aiuto con grep

Messaggio da vaeVictis »

Non ho capito.
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.»
Fabio1989
Prode Principiante
Messaggi: 151
Iscrizione: domenica 1 novembre 2009, 22:26

Re: [SH] Aiuto con grep

Messaggio da Fabio1989 »

Praticamente devo applicare la grep che hai fatto tu ad una lista di file estratti da una directory, ma col comando che ho usato io mi esce, oltre al nome del file, anche il relativo path e quindi non riesco a fare le mv che mi servono
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [SH] Aiuto con grep

Messaggio da vaeVictis »

L'estrazione la faremo con find.

Quello che estrai deve andare a finire:
1) tutto in un singolo file di output
2) in differenti file di output

Nel secondo caso, il file di output ha un nome in qualche modo riconducibile al file di input?
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.»
Fabio1989
Prode Principiante
Messaggi: 151
Iscrizione: domenica 1 novembre 2009, 22:26

Re: [SH] Aiuto con grep

Messaggio da Fabio1989 »

vaeVictis [url=http://forum.ubuntu-it.org/viewtopic.php?p=4603091#p4603091][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:L'estrazione la faremo con find.

Quello che estrai deve andare a finire:
1) tutto in un singolo file di output
2) in differenti file di output

Nel secondo caso, il file di output ha un nome in qualche modo riconducibile al file di input?
Gli output della prima grep vanno in un file (il nome è poco importante, avevo pensato a "<nomefile>.grepok"), analogamente per quelli della seconda ("<nomefile>.grepko")
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti