View Full Version : Riordinare righe di un file.log è possibile?
Matrixbob
27-10-2008, 13:15
Il file di log contiene tipiche righe di log di un server:
[08/10/27@13:59:22.704+0200] P-004862 T-000000 2 WS QRYINFO Query Plan: utpaxbar.p line 299
[08/10/27@13:59:23.704+0200] P-004862 T-000000 1 WS -- (Procedure: 'utpaxbar.p' Line:301) 0 -9999
[08/10/27@13:57:22.704+0200] P-004862 T-000000 1 WS -- (Procedure: 'utpaxbar.p' Line:301) 1 -9998
... è possibile riordinare le informazioni di questo "marge d grep"?
Matrixbob
27-10-2008, 14:43
Eurika!
il SORT.
Nemo1985
28-10-2008, 03:34
Salve, ho una necessità "simile" ho un log di apache che dovrei far analizzare da un programma, vorrei però eliminare le connessioni loggate da un determinato indirizzo IP, fino ad ora ho sempre dovuto analizzare manualmente il log ed eliminare quello che non interessava manualmente, ora però devo analizzare un log di 3 mesi, una roba da 10mb, c'è qualche comando che mi permetta di cancellare completamente le righe in questione?
Esempio delle righe che vorrei cancellare:
127.0.0.1 - - [02/Oct/2008:16:02:22 +0200] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.9 (Debian) PHP/5.2.6-3 with Suhosin-Patch (internal dummy connection)"
127.0.0.1 - - [02/Oct/2008:16:02:23 +0200] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.9 (Debian) PHP/5.2.6-3 with Suhosin-Patch (internal dummy connection)"
Poi ve ne sono altre, di accesso al sito web da rete locale, da eliminare anch'esse.
Grazie in anticipo :)
Matrixbob
28-10-2008, 07:27
Usa il comando grep di Linux per prendere solo quello che ti interessa e riversane il contenuto in un file.
Dopo di che fai la stessa cosa col sort.
Linux shell rulez.
Nemo1985
28-10-2008, 08:19
Più che un inclusione di quel che mi interessa mi servirebbe escludere quelle righe, con grep è possibile tagliare e incollare le righe più su dal file originario ad un file creato ad hoc? In questo caso in access.log mi rimarrebbero tutti gli indirizzi esclusi quelli che ho eliminato, giusto?
Purtroppo non sono esperto di grep, un aiutino? :sofico:
eclissi83
28-10-2008, 12:47
Più che un inclusione di quel che mi interessa mi servirebbe escludere quelle righe, con grep è possibile tagliare e incollare le righe più su dal file originario ad un file creato ad hoc? In questo caso in access.log mi rimarrebbero tutti gli indirizzi esclusi quelli che ho eliminato, giusto?
Purtroppo non sono esperto di grep, un aiutino? :sofico:
direttamente dal man di grep:
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
fai un cat del file con i vari grep -v redirectato in un altro file ancora...
esempio: cat access.log | grep -v "tuariga" | grep -v "altrariga" > cleanaccess.log
ciao
Nemo1985
28-10-2008, 13:33
Wow grazie, perfetto!
Ho dato un: cat access.log | grep -v "128.168.0.2" > cleanaccess.log
E funzionato alla perfezione, molte grazie ancora :)
eclissi83
28-10-2008, 15:24
Wow grazie, perfetto!
Ho dato un: cat access.log | grep -v "128.168.0.2" > cleanaccess.log
E funzionato alla perfezione, molte grazie ancora :)
di niente, e' bello aiutare gli altri :)
happy scripting :D
Matrixbob
29-10-2008, 10:52
di niente, e' bello aiutare gli altri :)
happy scripting :D
Sempre + difficile!
... e per cancellare i primi N carateri di una riga del file di log?
[NB]
Non sono statici in quanto c'è una dataime ... forse usando le espressioni regolari?
[08/10/27@13:59:22.704+0200] P-004862 T-000000 2 WS QRYINFO Query Plan: utpaxbar.p line 299
[08/10/27@13:59:23.704+0200] P-004862 T-000000 1 WS -- (Procedure: 'utpaxbar.p' Line:301) 0 -9999
[08/10/27@13:57:22.704+0200] P-004862 T-000000 1 WS -- (Procedure: 'utpaxbar.p' Line:301) 1 -9998
eclissi83
29-10-2008, 11:18
Sempre + difficile!
... e per cancellare i primi N carateri di una riga del file di log?
[NB]
Non sono statici in quanto c'è una dataime ... forse usando le espressioni regolari?
puoi usare cut oppure awk... l'importante e' avere un elemento fisso su cui fare lo split...
Matrixbob
13-11-2008, 16:48
Multifiltro in cascata
grep "stringa1" file_origine.txt | grep "stringa2" | grep "stringa3" > file_risultato.txt
Filtro in OR
grep -E "(STRIGA1|stringa2)" file_origine.txt > file_risultato.txt
Filtro case insensitive
grep -i "stringa" file_origine.txt > file_risultato.txt
Mix
grep "stringa1" file_origine.txt | grep -E "(stringa2|stringa3)" > file_risultato.txt
Filtro in AND: con estressioni regolari alla buona
grep "^stringa1*stringa2" > file_risultato.txt
... e per cercare una stringa conenuta in un qualsiasi file da un determinato file system in poi?
So che si poteva fare utilizzando Find + Grep ... qualcuno sa comporre questo macro comando?
Ad esempio:
find /file/system/ -exec grep -l "stringa" {} \; > file_risultato.txt
, potrebbe funzionare?
Nemo1985
13-11-2008, 17:14
visto che è stato riuppato, ho sempre dato il comando:
cat access.log | grep -v "128.168.0.2" > cleanaccess.log
se volessi cancellare altre righe, mettiamo l'ip 127.0.0.1, come faccio?
cat access.log | grep -v "(128.168.0.2|127.0.0.1)" > cleanaccess.log
E' giusto?
Se ne voglio aggiungere un terzo? un altro | seguito dall'indirizzo?
No sbagliato, la sintassi giusta è: cat access.log | grep -v "192.168.0.2" | grep -v "127.0.0.1" | grep -v "192.168.0.3" > access2.log
Se ne voglio aggiungere un terzo? un altro | seguito dall'indirizzo?
No sbagliato, la sintassi giusta è: cat access.log | grep -v "192.168.0.2" | grep -v "127.0.0.1" | grep -v "192.168.0.3" > access2.log
puoi usare egrep.
cat access.log | egrep -v '192.168.0.2|127.0.0.1|192.168.0.3' > access2.log
by
Nemo1985
14-11-2008, 13:49
Avevo provato ma non funzionava, ora riprovo, grazie :)
Perfetto, funziona! :D
Matrixbob
14-11-2008, 14:35
... ma della mia:
find /file/system/ -exec grep -l "stringa" {} \; > file_risultato.txt
, non mi dite niente?
Funziona?
Avete modo di provarla?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.