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