
Я пытаюсь удалить строку после 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
( n
skip m
)
sed '1~3d' file
который удаляет каждую третью строку, начиная с первой.
решение2
Чтобы выбрать только строки по модулю N
с помощью awk
try
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