2016-08-10 4 views
0

Ich habe Schwierigkeiten, die Protokolle aus einer Datei für einen bestimmten Zeitraum zu erhalten. Ich habe andere Posts durchgegangen, aber überall ist das Datum/die Zeit fest codiert, ich will nicht, dass es fest codiert ist und möchte es programmatisch holen.Versuchen, die Unix-Protokolle für einen bestimmten Zeitraum abzurufen

Dies ist, was ich versucht habe.

Das funktioniert,

awk -F, -v b='2016-08-10 00:40:06' -v e='date +"%F %T"' '{ if ($1 >= b && $1 <= e) print}' filename 

Während dies nicht funktioniert,

awk -F, -v b='date --date="10 minutes ago" +"%F %T"' -v e='date +"%F %T"' '{ if ($1 >= b && $1 <= e) print}' filename 

nicht sicher, warum das erste Datum der Parameter nicht on the fly berechnet zu werden?

Antwort

1

so etwas wie dieses Versuchen:

awk -v b="`date --date '10 minutes ago'`" 

Beispiel:

date;echo 1 2 3 |awk -v d="`date --date '10 minutes ago'`" '{print d}' 
Wed Aug 10 01:57:23 EDT 2016 
Wed Aug 10 01:47:23 EDT 2016 

echo 1 2 3 | awk -v d="`date --date '10 minutes ago'`" -v e="`date +%F%T`" '{print d, e}' 
Wed Aug 10 01:50:05 EDT 2016 2016-08-1002:00:05 
+0

Im Allgemeinen ist es besser, die ' "$ (...)" zu verwenden' Notation für [Befehl Substitution] (https: //www.gnu.org/software/bash/manual/bash.html#Command-Substitution) als die ältere '' "' ... "" '-Notation mit Back-Ticks (was das zusätzliche Problem hat, schwer zu betreten zu sein) in Markdown). Es ist nicht kritisch hier, da es keine Verschachtelung gibt, aber es ist eine gute Idee, es im Allgemeinen zu verwenden. –

Verwandte Themen