Я хочу использовать awk для удаления каждой n-й строки, начиная со строки 27 - PullRequest
0 голосов
/ 12 апреля 2019

У меня большой текстовый файл, заголовок которого состоит из 27 строк.Я хочу сохранить заголовок в новом файле, но затем в строке 28, где начинаются данные, я хочу сохранить только каждую десятую строку.

Таким образом, мой новый файл будет выглядеть так же, как мой исходный файл, куда он будет включать27 строк заголовка, но вместо всех данных, присутствующих там, в каждый файл будет включена только каждая десятая строка.

Я пытался использовать 'awk', я также пытался использовать 'sed', я могу получить егочтобы дать мне каждую 10-ю строку, но я не могу включить строки заголовка, т.е. начать с 28-й строки, а затем дать каждую 10-ю строку

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Для печати каждой 3-й строки после заголовка из 5 строк:

$ seq 20 | awk -v h=5 -v r=3 'NR<=h || !((NR-h)%r)'
1
2
3
4
5
8
11
14
17
20

или, если вы хотите, чтобы печаталась первая строка после заголовка из 5 строк:

$ seq 20 | awk -v h=6 -v r=3 'NR<=h || !((NR-h)%r)'
1
2
3
4
5
6
9
12
15
18

или, если вы предпочитаете:

$ seq 20 | awk -v h=5 -v r=3 'NR<=h || ((NR-h)%r)==1'
1
2
3
4
5
6
9
12
15
18

Измените значения переменных для соответствия.

0 голосов
/ 12 апреля 2019

Не могли бы вы попробовать следующее.

awk 'FNR<=27{print;next} ++count%10==0{print;count=""}'  Input_file

Или, если вы хотите сделать его более универсальным, поэтому, добавив переменные здесь, можно изменить значения переменных здесь и получить результаты по необходимости.

awk -v lines_till_print="27"  -v nth_line_print="10" '
FNR<=lines_till_print{
  print
  next
}
++count%nth_line_print==0{
  print
  count=""
}
'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...