awk nebo grep? – tiskové klíčové slovo a následující sloupce

Provedl jsem několik testů a výstupem je jeden soubor obsahující více výsledků v následujícím formátu

[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 

Chci pouze získat runtime různých běhů, které jsem provedl. Je tedy možné pozdravit „Čas“ a vytisknout další sloupec kromě jednoho? Nebo dokonce vytisknout pouze

1.02 1.22 

pro můj výše uvedený příklad? Raději bych vytiskl pouze tři sloupce s výsledky bez části blaa: D

Komentáře

  • Máte na mysli stejný sloupec, další než jeden řádek ?

Odpověď

Za předpokladu Time je vždy v šestém poli:

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

Alternativně můžete použít getline dvakrát – rychlé „n“ špinavé :

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

(„špinavý“, protože nekontroluje getline návratovou hodnotu).

Komentáře

  • Nebo použijte $NF, pokud ' vždy sloupec poslední .
  • @Kusalananda ano dobrý bod

odpověď

$ 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 

Výsledky jsou odděleny znakem -- v posledním grepu, který lze odstranit pomocí:

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

A s odstraněnými řádky ==== :

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

Odpověď

Dostali jste dvě odpovědi pomocí awk and grep, můžete také vyzkoušet sed:

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

Zde /===*/, bude odpovídat ===.., poté přejde na další řádek a najde čísla s plovoucí desetinnou čárkou, která mají desetinnou čárku, a přeskočí a smaže všechny ostatní řádky.

Bude tisknout výstup jako:

1.02 1.22 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *