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