Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Le novità MSI del 2026 per i videogiocatori
Le novità MSI del 2026 per i videogiocatori
Con le nuove soluzioni della serie MEG, acronimo di MSI Enthusiast Gaming, l'azienda taiwanese vuole proporre per il 2026 una gamma di proposte desktop che si rivolgono direttamente all'utente più appassionato con schede madri, chassis e sistemi di raffreddamento. Non da ultimi troviamo anche gli alimentatori, che abbinano potenza a ricerca della massima sicurezza di funzionamento.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-05-2014, 15:28   #1
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
[UNIX] Script shell - come estrarre due valori su due righe diverse da un file di log

Ciao a tutti,

vi scrivo in quanto ho bisogno di un aiuto su come estrapolare delle informazioni da un file di log con comandi unix o con uno script Shell.

Io vorrei estrapolare da un file di log il tempo che ci impiega la query cioè grep "exec time: " ma al tempo stesso filtrare anche in base all'ora, poi con un cut -d " " -f(x) prenderei il valore dell'esecuzione della query..

Il problema è che si trovano su due righe diverse (una sopra e l'altra sotto)

Codice:
2014-05-08 15:09:09,692 DEBUG - localhost - 
[UID=] - exec time: 1 ms - sql statement: <QUERY ESEGUITA..............> -- result: 0 -- debug connection: 11111111
e quindi il comando:
Codice:
grep " - exec time:" file.log | grep "$( date "+%Y-%m-%d %H" )" | cut -d " " -f5
non mi darebbe dei risultati soddisfacenti.

Avete per caso qualche soluzione al mio caso?

Grazie mille in anticipo.
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2014, 14:19   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Vedi se la tua versione di grep supporta l'opzione -A che ti consente di stampare un certo numero di righe successive a quella dove si trova la corrispondenza:
grep -A 1 "$( date "+%Y-%m-%d %H" )" file.log
Se poi vuoi unire le due righe puoi usare xargs:
grep -A 1 "$( date "+%Y-%m-%d %H" )" file.log | xargs -L 2 echo
e infine usi cut per selezionare le colonne che ti interessano.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2014, 18:10   #3
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Vedi se la tua versione di grep supporta l'opzione -A che ti consente di stampare un certo numero di righe successive a quella dove si trova la corrispondenza:
grep -A 1 "$( date "+%Y-%m-%d %H" )" file.log
Se poi vuoi unire le due righe puoi usare xargs:
grep -A 1 "$( date "+%Y-%m-%d %H" )" file.log | xargs -L 2 echo
e infine usi cut per selezionare le colonne che ti interessano.
Ciao Daniels118,
grazie mille per l'aiuto..

Allora...ho provato a fare come mi hai detto ma non riesco ad unire le due righe.

Il grep con il -A1 funziona correttamente ma poi il comando xargs non me li unisce.

Ho provato ad usare questo comando:

Codice:
grep -A1 " WARN  - " file.log | xargs -L 2 echo
Dov'è che sbaglio?

Grazie in anticipo.
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2014, 18:39   #4
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Cosa succede esattamente? Viene generato un errore oppure ottieni un risultato diverso?
Verifica che la tua versione di xargs supporti l'opzione -L, altrimenti possiamo utilizzare un comando diverso.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 10:18   #5
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
No nessun errore....Ottengo però un risultato diverso...Cioè il comando non unisce le due righe che vorrei unire...

La versione di xargs è questa:

xargs --version
xargs (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.

e facendo un man xargs l'opzione -L risulta essere presente.
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 12:06   #6
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Puoi fornirmi 3/4 righe del file che vorresti elaborare? (ovviamente contenenti le righe che vuoi estrarre)
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 13:52   #7
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Puoi fornirmi 3/4 righe del file che vorresti elaborare? (ovviamente contenenti le righe che vuoi estrarre)
Tipo così:

Quote:
2014-05-30 05:00:01,166 WARN - localhost - Task - [machine#Scheduler-00011]
[ID=] - exec time: 1053 ms - sql statement: SELECT * FROM ( SELECT...............
Ovviamente non tutte le righe sono a WARN ma sono presenti anche a DEBUG e quindi con un grep -A1 prendo le due righe che mi interessano...

La prima riga ha la data e la seconda riga il tempo di esecuzione con la query loggata
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 14:17   #8
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Mea culpa, ho dimenticato che l'opzione -A fa in modo che il grep inserisca nell'output delle linee contenenti "--" per separare i risultati, per cui bisogna eliminarli prima di passare l'output ad xargs:
grep -A1 " WARN - " file.log | grep -v "^--$" | xargs -L 2 echo
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 15:35   #9
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
Figurati...ci mancherebbe altro..

Ho provato ad eseguire il nuovo comando ma purtroppo questa volta non mi esce nulla...cioè il risultato è una riga vuota:

Codice:
[user@machine script]$ grep -A1 " WARN - " filelog.log | grep -v "^--$" | xargs -L 2 echo

[user@machine script]$
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 15:42   #10
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Il nome del file è corretto?

Verifica che ogni comando produca l'ouput previsto:

Il primo grep deve produrre una cosa del genere:
bla bla WARN - bla bla
tsk tsk
--
bla bla WARN - bla bla
tsk tsk

Il secondo grep:
bla bla WARN - bla bla
tsk tsk
bla bla WARN - bla bla
tsk tsk

E xargs:
bla bla WARN - bla bla tsk tsk
bla bla WARN - bla bla tsk tsk

Se il problema è su xargs possiamo sostituirlo con un comando tra awk, sed e paste opportunamente parametrizzati.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 16:02   #11
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
Sorry...mancava uno spazio dopo il WARN che mi ha fregato nel copa e incolla e non me ne ero accorto... :-D

Ho però ancora un errore che infatti mi ritorna 2 risultati in meno rispetto a quello dovrei ricevere:

Quote:
grep -A1 " WARN - " file.log | grep -v "^--$" | xargs -L 2 echo | cut -d":" -f4
1202 ms - sql statement
1053 ms - sql statement
1627 ms - sql statement
2140 ms - sql statement
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
1249 ms - sql statement
1192 ms - sql statement
1967 ms - sql statement
Parlando di awk e guardando su internet ho trovato questo comando awk 'ORS=NR%2?";":"\n"' e adattandolo al mio comando mi ritorna tutte le righe interessate:

Quote:
grep -A1 " WARN - " file.log | grep -v "^--$" | awk 'ORS=NR%2?";":"\n"' | cut -d":" -f4
1202 ms - sql statement
1053 ms - sql statement
1627 ms - sql statement
2140 ms - sql statement
1249 ms - sql statement
1192 ms - sql statement
1967 ms - sql statement
1732 ms - sql statement
1031 ms - sql statement
E' corretto?

Però non ho capito bene cosa fa il comando di awk...Sono ancora poco esperto in materia di comandi complesi di unix..

Ultima modifica di pumapc : 30-05-2014 alle 16:03. Motivo: Errore
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2014, 16:14   #12
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Evidentemente nelle righe che hai estratto vi sono degli apici non chiusi che danno fastidio ad xargs, in effetti è meglio utilizzare altri comandi (anche se sembrano più complessi).

Il comando awk serve proprio per la manipolazione delle stringhe, in particolare quello utilizzato da te non fa altro che impostare il separatore dei record in output secondo questo criterio:
  • punto e virgola se il numero di riga è pari
  • a capo se il numero di riga è dispari
i numeri di riga partono da 1.
In tal modo le righe verranno concatenate una volta con il punto e virgola e una volta con a capo, generando righe concatenate due a due.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2014, 12:22   #13
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
Ciao Daniels,

grazie mille per il grande aiuto e per tutte le info!!

Mi rivedrò un pò come funziona l'AWK perchè ho capito in generale come funziona ma faccio ancora fatica a capire i vari paramtri inseriti all'interno dell'AWK...
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2014, 12:50   #14
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Quote:
Originariamente inviato da pumapc Guarda i messaggi
Ciao Daniels,

grazie mille per il grande aiuto e per tutte le info!!

Mi rivedrò un pò come funziona l'AWK perchè ho capito in generale come funziona ma faccio ancora fatica a capire i vari paramtri inseriti all'interno dell'AWK...
Figurati...
Comunque i parametri fanno questo:
ORS significa "Output Record Separator", quindi "ORS=bla" imposta il separatore dei record di output a "bla".
NR sta per Numero di Riga.
L'espressione "A % B" divide A per B e restituisce il resto della divisione.
L'operazione "NR%2" quindi vale 0 per le righe pari e 1 per quelle dispari.
L'espressione "cond ? A : B" vale "A" se "cond" è vera, "B" in caso contrario; il valore zero viene interpretato come false, qualunque altro valore come vero.
L'espressione 'NR%2?";":"\n"' vale quindi ";" per le righe dispari e "\n" per le righe pari.
Poiché le righe pari e quelle dispari vengono una si e una no, ne conseguirà che i record di input verranno concatenati due a due.

Ultima modifica di Daniels118 : 25-06-2014 alle 12:56.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2014, 11:04   #15
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Figurati...
Comunque i parametri fatto questo:
ORS significa "Output Record Separator", quindi "ORS=bla" imposta il separatore dei record di output a "bla".
NR sta per Numero di Riga.
L'espressione "A % B" divide A per B e restituisce il resto della divisione.
L'operazione "NR%2" quindi vale 0 per le righe pari e 1 per quelle dispari.
L'espressione "cond ? A : B" vale "A" se "cond" è vera, "B" in caso contrario; il valore zero viene interpretato come false, qualunque altro valore come vero.
L'espressione 'NR%2?";":"\n"' vale quindi ":" per le righe pari e "\n" per le righe dispari.
Poiché le righe pari e quelle dispari vengono una si e una no, ne conseguirà che i record di input verranno concatenati due a due.

Ciao Daniels,

fantastico...grazie mille per la spiegazione molto accurata..
Ora mi ètutto un pò più chiaro anche se devo farci un pò di pratica e fare qualche esempio per capire meglio l'awk.

Una cosa e il parametro ";" a cosa servirebbe? per dividere le due righe concatenate una dal ":" e l'altra dallo "\n" ?
pumapc è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2014, 11:24   #16
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Scusami, nel precedente messaggio ho commesso un errore di battitura scrivendo i due punti al posto del punto e virgola, l'affermazione corretta è questa:
Quote:
L'espressione 'NR%2?";":"\n"' vale quindi ";" per le righe dispari e "\n" per le righe pari.
La tua domanda diventerebbe quindi:
Quote:
Una cosa e il parametro ":" a cosa servirebbe? per dividere le due righe concatenate una dal ";" e l'altra dallo "\n" ?
Più che dividere in questo caso bisognerebbe dire unire, infatti noi non vogliamo separare le righe ma unirle due a due e il ";" è il carattere con cui le uniamo (potremmo anche mettere semplicemente "", ma poi non sarebbe più possibile capire dove finiva la riga precedente e dove cominciava la successiva). Anche nel caso del "\n" le stiamo unendo, solo che tale carattere è proprio il separatore di riga, pertanto le righe resteranno divise, se preferisci puoi dire che le stai unendo con un divisore
Comunque il termine corretto non è "parametro" ma "operatore", infatti i simboli "?:" nel costrutto
espressione_booleana ? espressione1 : espressione2
prendono il nome di "operatore condizionale".

Ultima modifica di Daniels118 : 25-06-2014 alle 12:57.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2014, 11:37   #17
pumapc
Member
 
Iscritto dal: Nov 2007
Messaggi: 93
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Scusami, nel precedente messaggio ho commesso un errore di battitura scrivendo i due punti al posto del punto e virgola, l'affermazione corretta è questa:

La tua domanda diventerebbe quindi:

Più che dividere in questo caso bisognerebbe dire unire, infatti noi non vogliamo separare le righe ma unirle due a due e il ";" è il carattere con cui le uniamo (potremmo anche mettere semplicemente "", ma poi non sarebbe più possibile capire dove finiva la riga precedente e dove cominciava la successiva). Anche nel caso del "\n" le stiamo unendo, solo che tale carattere è proprio il separatore di riga, pertanto le righe resteranno divise, se preferisci puoi dire che le stai unendo con un divisore
Comunque il termine corretto non è "parametro" ma "operatore", infatti i simboli "?:" nel costrutto
espressione_booleana ? espressione1 : espressione2
prendono il nome di "operatore condizionale".
Figurati ci mancherebbe altro... Anzi grazie mille per la notevole spiegazione e pazienza :-D

Si in effetti meglio chiamare operatore che parametro...

Grazie mille di tutto..
pumapc è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
E' la GPU la grande novità delle ...
Ryzen AI 400 Series e nuovi modelli Ryze...
I notebook ASUS per il 2026: Zenbook e E...
NVIDIA alza ancora l’asticella con Vera ...
Dell UltraSharp: al CES 2026 il primo mo...
LG presenta i nuovi Gram Pro con lega Ae...
LG NanoCell 65'' a 499€: il 4K di qualit...
La Befana vien di notte, anche su Amazon...
Realme 12 4G 8GB/128GB a un prezzo folle...
DJI Mini 4 Pro Fly More Combo scende a s...
C'è un monitor Dell 24" Full...
HP Digital Passport, integrazione Copilo...
HP EliteBook X G2 ed EliteBoard G1a uffi...
Tutti possono avere un Alienware: al CES...
La gamma XPS di Dell si rinnova completa...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v