awk sau grep? – print cuvânt cheie și următoarele coloane

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 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *