Achtung Anfänger mit grep/awk probs

F

Fancan

Grünschnabel
Hi Leute,

ich muss wieder scripten, leider viel vergessen und auch die Suchfunktion und auch die FAQ konnte mir nicht weiter helfen.

Zur Überwachung von Filern brauche ich ein Script. Der Output des Filers ist in etwa:
Hostname:c:\ Filername:/vol/vol004/Hostname_c__ Snapvaulted 11:22:46 Idle
Hostname:systemstate Filername:/vol/win_vol004/Hostname_systemstate Snapvaulted 11:23:04 Idle

Was ich jetzt brauche ist ein Script, was mir im Grund nur die Zeilen anzeigt, bei welchen die Stundenzahl (Hier ja die 11) grösser ist als 24.

Meine Probleme gehen ja schon da los, daß das mögliche Trennzeichen ":" unterschiedlich oft vorkommt.

OS ist Linux : 2.6.16.54-0.2.5-smp
Shell? Was sich anbietet, da bin ich glaube ich flexibel.

Vielen Dank im Vorraus

Fancan
 
kannst du mal was exaktes posten? oder ist das schon die exakte ausgabe?
 
Hi Shorti,

ja, das ist die Ausgabe die der Befehl den ich auswerten will ausgibt.
Habe nur eben die Host und Filernamen rausgenommen.
Hier ist die Überschriftszeile der Ausgabe:
Source Destination State Lag Status

Danke und Gruss
Fancan

PS: Dachte schon daran eine Art verschalteten awk zu machen, aber das krieg ich nicht hin. Also erst ein awk ' [print $4} ' was die Gesamtzeit wäre und dann | awk ' {print $1}' oder so, aber das haut nicht hin.
 
Als Schnellschuss würde ich

Code:
grep "[2-9][4-9]:[0-5][0-9]:[0-5][0-9]"

zur Diskussion stellen.
 
Ich werd bekloppt.
Volltreffer.
Ich habs im Vorfeld schon geahnt, daß meine Idee mit den verschachtelten awks völlig überzogen ist und es eine supereinfache Variante zur Lösung meines kleinen Problems gibt.

Vielen Dank, das hilft mir schon sehr weiter!!!

Gruss
Fancan

PS: Jetzt muss ich nur noch tüfteln, wie ich auch die Zeilen bekomme, die beispielsweise 110:34:21 haben, also 110 Stunden alt sind. Wahrscheinlich erstmal 3 Grepabfragen, bis es mal grundsätzlich geputzt ist, denn im Augenblick geht das hier bis in die 1000er Stunden.
 
Code:
grep -E "[2-9][4-9]:[0-5][0-9]:[0-5][0-9]|[1-9]+[0-9][0-9]:[0-5][0-9]:[0-5][0-9]"
 
Hi Aqualung,

danke nochmal. Aber das -E löst das Problem nicht weiter.
Folgende Zeile kriege ich damit nicht:
Hostname:c:\ Filername:/vol/vol004/Hostname_c__ Snapvaulted 720:02:06 Idle

Aber wie gesagt, wenns einmal aufgeräumt ist, wird der Wert hoffentlich nie wieder 3stellig ;-)

Danke und Gruss
Fancan
 
Code:
grep -P "\s\d{2,4}:\d{2}:\d{2}"
Wozu "-P" (welches wohl bei nicht so vielen Distributionen mit einkompiliert ist) benutzen, wenns genauso auch mit dem "standard" (GNU) grep geht:
Code:
echo -e 'foo\n 11:11:11\n 111:11:11\n 1:11:11'|grep ' [0-9]\{2,4\}\(:[0-9]\{2\}\)\{2\}'

edit: Wenn man denn wirklich mal die Perl-Regex-Engine braucht ist das portabelste imho direkt perl zu verwenden:
Code:
echo 'foo bar bar '|perl -ne 'print if /(\w{2,5}\s+){2}\1/'
Perl sollte quasi überall vorhanden sein.
 
Zuletzt bearbeitet:

Ähnliche Themen

Ubuntu X / dbus problem

HP PSC 2175 - CUPS druckt nicht

Kein Hardwaremixing: Workarount gesuchd

Debian Lenny, ATI proprietary, Skystar2, Kaffeine

Wine Soundprobleme mit SoundMAX AD1986A unter Linux (Asus M2NPV-VM)

Zurück
Oben