Удалить каждую N-ую строку в оболочке

Удалить каждую N-ую строку в оболочке

Я пытаюсь удалить строку после N строк с помощью awk и не могу сделать это правильно. Формат файла такой

YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX

Реальным примером будет

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

Как удалить строки YY или строки, в которых написано "office". Мне нужно удалить строку каждые две строки независимо от их содержания.

решение1

Если у вас есть GNU sed, вы можете использовать запись адреса n~m( nskip m)

sed '1~3d' file

который удаляет каждую третью строку, начиная с первой.

решение2

Чтобы выбрать только строки по модулю Nс помощью awktry

awk '!(NR%2)' file

или

awk 'NR%3==0' file

Здесь NRобозначает количество обработанных на данный момент строк.


В вашем конкретном случае (удалите все строки с Y):

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

Связанный контент