Am făcut câteva repere și rezultatul este un singur fișier care conține mai multe rezultate cu următorul 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
Vreau doar să obțin timpul de rulare al diferitelor runde pe care le-am făcut. Deci, este posibil să grep „Time” și să tipăriți următoarea, dar o singură coloană? Sau chiar pentru a imprima numai
1.02 1.22
pentru exemplul meu de mai sus? Aș prefera să tipăresc doar cele trei coloane de rezultate fără partea blaa: D
Comentarii
- Adică aceeași coloană, următoarea, dar una linie ?
Răspuns
Presupunând Time
este întotdeauna în al șaselea câmp:
$ awk "$6 == "Time" {t = NR} t && NR == t+2 {print $6}" file 1.02 1.22
Alternativ, puteți utiliza getline
de două ori – rapid „n” murdar :
awk "$6 == "Time" {getline; getline; print $6}" file
(„murdar”, deoarece nu verifică getline
valoarea returnată).
Comentarii
- Sau utilizați
$NF
dacă ' este întotdeauna ultima coloană. - @Kusalananda da punct bun
Răspuns
$ 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
Rezultatele sunt separate de --
în ultimul grep care poate fi eliminat cu:
$ grep -A2 ^T/V file | grep -v "^--"
Și cu liniile ====
eliminate :
$ grep -A2 ^T/V file | grep -v "^--\|=\+"
Răspuns
Ai primit două răspunsuri folosind awk and grep
, puteți încerca și sed
:
sed -E "/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d" file_name
Aici /===*/
, se va potrivi cu ===..
, apoi va trece la linia următoare și va găsi numere în virgulă mobilă cu zecimale între ele și va sări și șterge toate celelalte linii.
Va imprima rezultate precum:
1.02 1.22