awk oder grep? – Schlüsselwort und folgende Spalten drucken

Ich habe einige Benchmarks durchgeführt und die Ausgabe ist eine einzelne Datei mit mehreren Ergebnissen im folgenden Format

[blaaa] 1st run T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 [blaaaa...] 2nd run T/V N NB P Q Time ========================== 4 42 4 1 2 1.22 

Ich möchte nur die Laufzeiten der verschiedenen von mir durchgeführten Läufe abrufen. Ist es also möglich, „Zeit“ zu erfassen und die vorletzte Spalte auszudrucken? Oder sogar nur

1.02 1.22 

für mein Beispiel oben ausdrucken? Ich würde es vorziehen, nur die drei Ergebnisspalten ohne den blaa-Teil auszudrucken: D

Kommentare

  • Sie meinen dieselbe Spalte, neben einer Zeile ?

Antwort

Angenommen, Time steht immer im sechsten Feld:

$ awk "$6 == "Time" {t = NR} t && NR == t+2 {print $6}" file 1.02 1.22 

Alternativ können Sie getline zweimal verwenden – schnell „n“ schmutzig :

awk "$6 == "Time" {getline; getline; print $6}" file 

(„schmutzig“, da der Rückgabewert getline nicht überprüft wird).

Kommentare

  • Oder verwenden Sie $NF, wenn es ' immer ist die letzte Spalte.
  • @Kusalananda ja guter Punkt

Antwort

$ grep -o "Time\|[0-9\.]\+$" file Time 1.02 Time 1.22 $ grep -o "[0-9\.]\+$" file 1.02 1.22 $ grep -A2 ^T/V file T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 -- T/V N NB P Q Time ========================== 4 42 4 1 2 1.22 

Die Ergebnisse werden im letzten grep durch -- getrennt, das entfernt werden kann mit:

$ grep -A2 ^T/V file | grep -v "^--" 

Und mit den ==== Zeilen entfernt :

$ grep -A2 ^T/V file | grep -v "^--\|=\+" 

Antwort

Sie haben zwei Antworten mit awk and grep können Sie auch sed versuchen:

sed -E "/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d" file_name 

Hier /===*/ stimmt mit ===.. überein, geht dann zur nächsten Zeile und findet Gleitkommazahlen mit Dezimalstellen dazwischen und überspringt und löscht alle anderen Zeilen.

Die Ausgabe wird wie folgt gedruckt:

1.02 1.22 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.