SED: Как удалить каждые 10 строк в файле (тонкий или подвыбор файла) - PullRequest
1 голос
/ 05 апреля 2011

Пока у меня есть это:

sed -n '0,10p' yourfile > newfile

Но это не работает, просто выводит пустой файл: (

Ответы [ 4 ]

4 голосов
/ 05 апреля 2011

Ваш вопрос неоднозначен, поэтому я могу думать о каждой перестановке:

Печатать только первые 10 строк

head -n10 yourfile > newfile

Пропустить первые 10 строк

tail -n+10 yourfile > newfile

Печатать каждую 10-ю строку

awk '!(NR%10)' yourfile > newfile

Удалить каждую 10-ю строку

awk 'NR%10' yourfile > newfile
3 голосов
/ 05 апреля 2011

(Поскольку неоднозначные вопросы могут иметь только неоднозначный ответ ...)

К печать каждая десятая строка (GNU sed):

$ seq 1 100 | sed -n '0~10p'
10
20
30
40
...
100

В качестве альтернативы (GNU sed):

$ seq 1 100 | sed '0~10!d'
10
20
30
40
...
100

К удалить каждую десятую строку (GNU sed):

$ seq 1 100 | sed '0~10d'
1
...
9
11
...
19
21
...
29
31
...
39
41
...

К печать первые десять строк (POSIX):

$ seq 1 100 | sed '11,$d'
1
2
3
4
5
6
7
8
9
10

К удалить первые десять строк (POSIX):

$ seq 1 100 | sed '1,10d'
11
12
13
14
...
100
0 голосов
/ 13 мая 2013

Для не-GNU sed, для печати каждой 10-й строки используйте

sed '10,${p;n;n;n;n;n;n;n;n;n;}'

(GNU: sed -n '0~10p')

и для удаления каждой 10-й строки используйте

sed 'n;n;n;n;n;n;n;n;n;d;'

(GNU: sed -n '0~10d')

0 голосов
/ 05 апреля 2011
python -c "import sys;sys.stdout.write(''.join(line for i, line in enumerate(open('yourfile')) if i%10 == 0 ))" >newfile

Это длиннее, но это один язык - не разные синтаксис и параметры для каждой вещи, которую пытаются сделать.

...