awk tai grep? – tulosta avainsana ja seuraavat sarakkeet

Tein joitain vertailuarvoja, ja tulos on yksi tiedosto, joka sisältää useita tuloksia seuraavassa muodossa.

[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 

Haluan vain hankkia suorittamieni eri ajojen ajoajat. Joten onko mahdollista napata ”Aika” ja tulostaa seuraava kuin yksi sarake? Tai edes tulostaa vain

1.02 1.22 

yllä olevalle esimerkilleni? Haluaisin mieluummin tulostaa vain kolme tulosaraketta ilman blaa-osaa: D

Kommentit

  • Tarkoitat samaa saraketta, seuraavaksi vain yhtä rivi ?

vastaus

Olettaen, että Time on aina kuudennella kentällä:

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

Vaihtoehtoisesti voit käyttää getline kahdesti – nopea ”n” likainen :

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

(”likainen”, koska se ei tarkista palautusarvoa getline).

Kommentit

  • Tai käytä $NF, jos se ' s aina viimeinen -sarake.
  • @Kusalananda kyllä hyvä kohta

Vastaa

$ 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 

Tulokset erotetaan -- viimeisessä grepissä, joka voidaan poistaa:

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

Ja ==== -rivit on poistettu :

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

vastaus

Sinulla on kaksi vastausta käyttämällä awk and grep, voit myös kokeilla sed:

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

Täällä /===*/, vastaa ===.., sitten se siirtyy seuraavalle riville ja löytää liukulukujen numerot, joiden välissä on desimaaleja, ja ohittaa ja poistaa kaikki muut rivit.

Se tulostaa tuloksen kuten:

1.02 1.22 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *