РЕДАКТИРОВАТЬ: для справки, «материал» является общей переменной, как и «KEEP».
Можно оставить «Привет, меня зовут Дейв» в строке 2 и «Я люблю пирог» в строке 7. Цифры, которые я здесь привожу, приведены только для иллюстрации и НЕ отображаются в данных.
У меня был файл, который нужно было проанализировать, сохраняя каждую 4-ю строку, начиная с 3-й строки. Другими словами, это выглядело так:
1 stuff
2 stuff
3 KEEP
4
5 stuff
6 stuff
7 KEEP
8 stuff etc...
Отлично, sed решил это легко с помощью:
sed -n -e 3~4p myfile
дает мне
3 KEEP
7 KEEP
11 KEEP
Теперь у меня другой формат файла и другой взгляд на шаблон:
1 stuff
2 KEEP
3 KEEP
4
5 stuff
6 KEEP
7 KEEP etc...
и я все еще хочу вывод
2 KEEP
3 KEEP
6 KEEP
7 KEEP
10 KEEP
11 KEEP
Вот в чем проблема - это шаблонный шаблон для sed. Это «каждая 4-я строка, выплюнуть 2 строки, но начать со строки 2».
Нужно ли иметь какой-то цикл DO / FOR в моем sed или мне нужна другая команда, такая как awk или grep? До сих пор я пробовал форматы, такие как:
sed -n -e '3~4p;4~4p' myfile
и
awk 'NR % 3 == 0 || NR % 4 ==0' myfile
и
sed -n -e '3~1p;4~4p' myfile
и
awk 'NR % 1 == 0 || NR % 4 ==0' myfile
источник: https://superuser.com/questions/396536/how-to-keep-only-every-nth-line-of-a-file