Извлекайте блоки строк с помощью sed - PullRequest
0 голосов
/ 13 июня 2018

Как можно использовать sed для извлечения n строк файла каждые m -ой строки?

Скажем, мой текстовый файл выглядит так:

myfile.dat:

1
2
3
4
5
6
7
8
9
10

Скажите, что я хочу извлечь блоки из трех строк, а затем пропустить две строки по всему файлу, чтобы мои выходные данные выглядели так:

output.dat:

1
2
3
6
7
8

Любые предложения о том, как можно добиться этого с помощью sed?

Редактировать:

Для моего примера я мог бы просто использовать

sed -n 'p; n; p; n; p; n; n' myfile.dat> output.dat

или с GNU sed (не рекомендуется из-за переносимости)

sed '1 ~ 5b; 2 ~ 5b; 3 ~ 5b; d' myfile.dat> output.dat

Однако обычно я хочу напечатать блоки из 2450 строк из файла с 49 002 450 строками,такой, что мой выходной файл содержит 247 450 строк.

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

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

sed -n '1~5,+2p' file

Начиная со строки 1, печатать номера строк с модулем 5 и следующие две строки.

Альтернатива:

sed -n 'N;N;p;n;n' file
0 голосов
/ 13 июня 2018

В вашем случае ниже будет работать.Он проверяет остаток, когда делится на 5 между 1 и 3:

awk 'NR%5==1, NR%5==3' myfile.dat
...