Extrahieren Sie den Zeitbereich aus der Protokolldatei mit AWK

Extrahieren Sie den Zeitbereich aus der Protokolldatei mit AWK

Ich versuche, den Zeitbereich aus einer Protokolldatei zu extrahieren, indem ich Shellvariablen übergebe awk. So sieht meine Protokolldatei aus.

2014-11-24 12:58:59.290 1.1.1.1  etc..
2014-11-24 13:58:59.290 2.2.2.2  etc..
2014-11-24 14:58:59.290 3.3.3.3  etc ..
2014-11-24 12:58:59.290 4.4.4.4  etc.. 
2014-11-24 15:58:59.290 4.4.4.4  etc..

Angenommen, ich möchte einen Zeitbereich zwischen 12 und 13 Stunden extrahieren. Hier ist das Bash-Skript, das ich geschrieben habe.

stime=12
etime=13
date_=2014-11-24

awk 'BEGIN {
          a='$stime';b='$etime';d='$date_'; FS="[: ]"
       }

      { 
  if ( $1 == d && $2 >= a && $2 < b )
      print $1 $2 $3
      }'  logfile.txt

Meine Ausgabe sollte so aussehen.

 2014-11-24 12:58:59.290 1.1.1.1  etc..  
 2014-11-24 12:58:59.290 4.4.4.4  etc..  

Ich sehe weder eine Ausgabe noch Fehler. Ich weiß nicht, was schief läuft. Für jede Hilfe wäre ich dankbar. Danke

Antwort1

stime=12
etime=13
date=2014-11-24

awk -v a="$stime" -v b="$etime" -v d="$date" -F "[: ]+" '
  { 
  if ( $1 == d && $2+0 >= a && $2+0 < b )
      print $1,$2,$3
  }'  logfile.txt

Das Ergebnis ist:

2014-11-24 12 58
2014-11-24 12 58

Anmerkungen:

  1. FS="[: ];"bewirkt, dass der Feldtrenner auf einen Doppelpunkt oder ein Leerzeichen gefolgt von einem Semikolon gesetzt wird. Diese Kombination kommt in der Eingabedatei nie vor.

  2. Im ursprünglichen Code d='$date_';ergab die Zuweisung dden Wert 1979. Das liegt daran, dass der Ausdruck, wenn er in AWK-Code eingeführt wird, 2014-11-24als numerischer Ausdruck interpretiert wird, der eine Subtraktion erfordert.

  3. Es empfiehlt sich, Shell-Variablen mit dieser -vOption an awk zu übertragen. Sowohl die Shell als auch awk können korrekte Anführungszeichen erfordern, und mit dieser -vOption können wir diese Anführungszeichenprobleme einzeln behandeln.

  4. awk kann je nach Kontext entweder numerische oder alphabetische Vergleiche durchführen. Durch das Hinzufügen +0des Codes stellen wir sicher, dass awk numerische Vergleiche durchführt.

verwandte Informationen