Pomiń pierwsze 6 linii / wierszy w pliku tekstowym za pomocą awk


39

Jak mogę pominąć pierwsze 6 linii / wierszy w pliku tekstowym (input.txt), a resztę przetworzyć za pomocą awk? Format mojego skryptu awk (program.awk) jest następujący:

BEGIN {
} 

{ 
process here
} 

END {

}

Mój plik tekstowy wygląda następująco:

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

Chcę przetworzyć plik, zaczynając od:

0.3 3.3
1.5 2.1
.
.
.

Odpowiedzi:


59

Użyj jednego z dwóch wzorów:

NR>6 { this_code_is_active }

albo to:

NR<=6 { next }
{ this_code_is_active }

Użyj FNR zamiast NR, jeśli masz wiele plików jako argumentów do awk i chcesz pominąć 6 linii w każdym pliku.


29

Próbować:

awk 'FNR > 6 { #process here }' file

4
Dobry! Ale nie wyjaśniłeś, dlaczego jest to lepsze - w przypadku wielu plików FNRjest to numer wiersza w każdym pliku, podczas gdy NRjest to liczba w całym danych wejściowych (nie jest to problem podczas instalacji).
Tomasz Gandor

3

Możesz także pominąć dowolną liczbę wierszy na początku lub na końcu pliku za pomocą headlub tailprogramów.

Na twoje konkretne pytanie

tail input.txt -n+7 | program.awk

zrobi, pod warunkiem, że Twój program.awkplik jest wykonywalny. W przeciwnym razie możesz użyć

tail input.txt -n+7 | awk -f program.awk

W ten sposób oszczędzasz porównanie dla każdej linii i nie musisz zmieniać logiki kodu AWK.

tail rozpocznie przesyłanie strumieniowe tekstu od siódmej linii, pomijając sześć pierwszych linii.

Wydajność nie będzie miała wielkiego znaczenia, szczególnie jeśli proces tekstowy jest prosty dzięki buforowaniu. Jednak w przypadku długich plików i wielokrotnego używania w środowisku chmurowym można zaoszczędzić pewien koszt.


Prawidłowo, ale z zasady należy unikać orurowania, gdy można to łatwo zrobić za pomocą jednego narzędzia. Pomyśl o ogromnym pliku tekstowym łączącym oba polecenia, aby usunąć kilka wierszy.
Philippos
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.