tar grep

N

Noobi

Jungspund
Hi Männers,

Aufgabenstellung:

Eine Archivdatei mit mehreren Dateien als Inhalt. Die namen der Dateien sind wiefolgt aufgebaut: kundennummer-timestamp(jjjjmmtthhmmss)-auftargsnummer

bsp Inhalt der Archivdatei: 015889763158-20090610121312-015605432150
015889763158-20090615141412-015605432150
015889763158-20090620201312-015605432150
015889763158-20090620121312-015605432150

Nun sollen anhand Datum stunde und Minute Dateien gefiltert werden, doch irgendwie will das nicht wie ich will.

Mein vorgehen:

bsp:

Datum=20090612
Uhrzeit=17.31-24.00

tar tf archivdatei.tar | grep '20090612[1731]-[2400]'

Doch so will das nicht funktionieren.

Vielen Dank für eure Hilfe
 
Hi,

kurz Vorweg: Das Board unterstuetzt Code-Bloecke, es waere nett wenn du die nutzen koenntest.

Wenn ich das richtig verstehe, suchst du also nach einem grep Ausdruck, der alle Zahlen von 200906121731 bis 200906122400 abdeckt, mit den ueblichen Zeiteinschraenkungen fuer die letzten 4 Zahlen, ja?

Ich habe gerade an einem regulaeren Ausdruck gebastelt der das kann, aber das ist dermassen friemelarbeit, als dass das keinen Sinn macht, wenn du haeufiger mal die Intervalle aendern moechtest.

Ich denke in dem Fall solltest du, statt grep zu benutzen, lieber in einer Schleife uber die Dateien iterieren. Pro Iteration kannst du dann in Ruhe den Dateinamen parsen, und dann gucken ob die Parameter der aktuellen Datei deinen Wuenschen entsprechen (z.B. $hour >= 17, etc.).

Hier der regulaere Ausdruck:
Code:
egrep "20090612((1[8-9][0-5][0-9])|(17[4-5][0-9])|(173[1-9])|(2[0-3][0-5][0-9])|2400)"
Aber wie du siehst ist das kaum zu lesen, und sehr spezifisch. Ich denke mit einer Schleife und dem parsen der Dateinamen faehrst du besser.

mfg,
bytepool
 
Für Filterungen nach Zeit empfehlen sich "seconds since epoch", z.B. so:

Code:
to_test1="20090615 10:31" 
to_test2="20090615 23:59" 
tar tf archivdatei.tar  | while read zeile;do 
    datestr=$(echo "$zeile" | cut -d"-" -f2 | sed "s/\(........\)\(..\)\(..\)\(..\)/\1 \2:\3:\4/") 
    sec=$(date -d "$datestr" +%s) 
    t1=$(date -d "$to_test1" +%s); 
    t2=$(date -d "$to_test2" +%s); 
    if [ $sec -ge $t1 -a $sec -le $t2 ]; then
        echo "$zeile"
    fi   
done
 
Zuletzt bearbeitet:

Ähnliche Themen

Maskiertes Suchen, Ersetzen und Rechnen in access.log vor weitere Bearbeitung

Zurück
Oben