Löschen Sie jede N-te Zeile in der Shell

Löschen Sie jede N-te Zeile in der Shell

Ich versuche, mit awk eine Zeile nach N Zeilen zu löschen, aber es scheint nicht zu funktionieren. Das Dateiformat ist wie folgt

YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX

Das wahre Beispiel wäre

office3
3
1
office3
6
1
office3
6
3
office3
1
1

Wie kann ich die YY-Zeilen oder die Zeilen mit der Aufschrift „Büro“ löschen? Ich muss alle zwei Zeilen eine Zeile löschen, unabhängig von ihrem Inhalt.

Antwort1

Wenn Sie GNU sed haben, können Sie die n~m( nskip m) Adressnotation verwenden

sed '1~3d' file

Dadurch wird jede dritte Zeile gelöscht, beginnend mit der ersten.

Antwort2

Um nur Zeilen modulo auszuwählen, versuchen NSieawk

awk '!(NR%2)' file

oder

awk 'NR%3==0' file

Gibt hier NRdie Anzahl der bisher verarbeiteten Zeilen an.


In Ihrem speziellen Fall (alle Zeilen mit entfernen Y):

$ echo 'YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX' | awk '!(NR%3==1)'
XXXXXX
XXXXXX
XXXXXX
XXXXXX

verwandte Informationen