Подтвердить что ты не робот

Как я могу удалить каждую X-ю строку в текстовом файле?

Рассмотрим текстовый файл с научными данными, например:

5.787037037037037063e-02 2.048402977658663748e-01
1.157407407407407413e-01 4.021264347118673754e-01
1.736111111111111049e-01 5.782032163406526371e-01

Как я могу легко удалить, например, каждую вторую строку или каждые 9 из 10 строк в файле? Возможно ли это, например, с помощью bash script?

Фон: файл очень большой, но мне нужно гораздо меньше данных для построения. Обратите внимание, что я использую Ubuntu/Linux.

4b9b3361

Ответ 1

Это легко сделать с помощью awk.

Удалите каждую другую строку:

awk 'NR % 2 == 0' file > newfile

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

awk 'NR % 10 != 0' file > newfile

Переменная NR в awk - номер строки. Все, что находится вне {} в awk, является условным, а действие по умолчанию - печать.

Ответ 2

Как насчет perl?

perl -n -e '$.%10==0&&print'       # print every 10th line

Ответ 3

Попробуйте что-то вроде:

awk 'NR%3==0{print $0}' file

Это напечатает одну строку из трех. Или:

awk 'NR%10<9{print $0}' file 

напечатает 9 строк из десяти.

Ответ 4

Вы могли бы сделать это с помощью sed, например.

sed -n -e 'p;N;d;' file # print every other line, starting with line 1

Если у вас есть GNU sed, это довольно легко

sed -n -e '0~10p' file # print every 10th line
sed -n -e '1~2p' file # print every other line starting with line 1
sed -n -e '0~2p' file # print every other line starting with line 2

Ответ 5

Это может сработать для вас (GNU sed):

seq 10 | sed '0~2d' # delete every 2nd line
1
3
5
7
9
seq 100 | sed '0~10!d' # delete 9 out of 10 lines
10
20
30
40
50
60
70
80
90
100

Ответ 6

Вы можете использовать awk и оболочку script. Awk может быть трудным, но...

Это приведет к удалению определенных строк, которые вы скажете:

nawk -f awkfile.awk [filename]

awkfile.awk contents

BEGIN {
if (!lines) lines="3 4 7 8"
n=split(lines, lA, FS)
for(i=1;i<=n;i++)
 linesA[lA[i]]
}
!(FNR in linesA)

Также я не могу вспомнить, идет ли VIM со стандартным Ubuntu или нет. Если не получите его.

Затем откройте файл с помощью vim   vim [имя_файла]

Затем введите

:%!awk NR\%2 or :%!awk NR\%2 

Это приведет к удалению всех остальных строк. Просто измените 2 на другое целое число на другую частоту.