awk eller grep? – skriv ut nyckelord och följande kolumner

Jag gjorde några riktmärken och utdata är en enda fil som innehåller flera resultat med följande 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 

Jag vill bara få körtiderna för de olika körningarna jag gjort. Så är det möjligt att grep ”Time” och skriva ut nästa men en kolumn? Eller till och med bara att skriva ut

1.02 1.22 

för mitt exempel ovan? Jag föredrar att bara skriva ut de tre resultatkolumnerna utan blaa-delen: D

Kommentarer

  • Du menar samma kolumn, nästa men en rad ?

Svar

Förutsatt att Time är alltid i det sjätte fältet:

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

Alternativt kan du använda getline två gånger – snabbt ”n” smutsigt :

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

(”smutsig” eftersom det inte kontrollerar getline returvärdet).

Kommentarer

  • Eller använd $NF om det ' alltid sista kolumnen.
  • @Kusalananda ja bra poäng

Svar

$ 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 

Resultaten separeras av -- i den sista grep som kan tas bort med:

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

Och med ==== raderna borttagna :

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

Svar

Du fick två svar med awk and grep, du kan också prova sed:

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

Här /===*/, matchar ===.., sedan går den till nästa rad och hittar flytande siffror med decimaler mellan dem och hoppar över och raderar alla andra rader.

Det skrivs ut som:

1.02 1.22 

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *