Wykonałem kilka testów porównawczych i wynikiem jest pojedynczy plik zawierający wiele wyników w następującym formacie
[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
Chcę tylko pobrać środowiska wykonawcze różnych wykonanych przeze mnie przebiegów. Czy jest więc możliwe grepowanie „Czasu” i wydrukowanie przedostatniej kolumny? Lub nawet wydrukować tylko
1.02 1.22
dla mojego przykładu powyżej? Wolałbym wydrukować tylko trzy kolumny wyników bez części blaa: D
Komentarze
- Masz na myśli tę samą kolumnę, a następnie jedną linia ?
Odpowiedź
Zakładając Time jest zawsze w szóstym polu:
$ awk "$6 == "Time" {t = NR} t && NR == t+2 {print $6}" file 1.02 1.22
Alternatywnie możesz użyć getline dwa razy – szybkie „n” brudne :
awk "$6 == "Time" {getline; getline; print $6}" file
(„dirty”, ponieważ nie sprawdza wartości zwracanej getline).
Komentarze
- Lub użyj
$NF, jeśli ' s zawsze ostatnia kolumna. - @Kusalananda tak dobra uwaga
Odpowiedź
$ 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
Wyniki są oddzielone znakiem -- w ostatnim pliku grep, który można usunąć za pomocą:
$ grep -A2 ^T/V file | grep -v "^--"
I po usunięciu ==== linii :
$ grep -A2 ^T/V file | grep -v "^--\|=\+"
Odpowiedź
Masz dwie odpowiedzi używając awk and grep, możesz także spróbować sed:
sed -E "/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d" file_name
Tutaj /===*/, dopasuje ===.., a następnie przejdzie do następnej linii i znajdzie liczby zmiennoprzecinkowe z dziesiętnymi między nimi oraz pominie i usunie wszystkie inne linie.
Wyświetli wynik w postaci:
1.02 1.22