awk vagy grep? – kulcsszó és az azt követő oszlopok nyomtatása

Néhány referenciaértéket készítettem, és a kimenet egyetlen fájl, amely több eredményt tartalmaz a következő formátummal

[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 

Csak az általam készített különböző futások futási idejét szeretném megszerezni. Tehát meg lehet grepelni az “Időt” és kinyomtatni a következő oszlopot? Vagy akár csak a kinyomtatáshoz

1.02 1.22 

a fenti példámhoz? Legszívesebben csak a három eredményoszlopot nyomtatnám ki a blaa rész nélkül: D

Hozzászólások

  • Ugyanazt az oszlopot érted, a következő mellett egyet > vonal ?

Válasz

Feltételezve, hogy Time mindig a hatodik mezőben van:

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

Alternatív megoldásként kétszer is használhatja a getline szót – gyors “n” piszkos :

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

(“piszkos”, mert nem ellenőrzi a getline visszatérési értéket).

Megjegyzések

  • Vagy használja a $NF elemet, ha mindig ' s van az utolsó oszlop.
  • @Kusalananda igen jó pont

Válasz

$ 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 

Az eredményeket -- választja el az utolsó grep-ben, amely eltávolítható a következővel:

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

És eltávolítva a ==== sorokat :

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

Válasz

Két választ kapott a , kipróbálhatja a sed:

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

Itt /===*/, megegyezik a következővel: ===.., majd a következő sorra lép, és tízes számmal rendelkező lebegőpontos számokat talál közöttük, és az összes többi sort kihagyja és törli.

Ilyen formátumban fogja kinyomtatni a kimenetet:

1.02 1.22 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük