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