как напечатать каждую пятую строку в файле - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть файл с номерами

20
18
21
16
14
30
40
24

, и мне нужно вывести четыре файла со строками, напечатанными с интервалом 4, поэтому у нас есть строки 1,5,9 ...

20
14

Затем строки 2,6,10 ...

18
30

Затем 3,7,11 ...

21
40

, а затем 4,8,12 ...

16 
24

Я попробовал приведенный ниже код, но он не дает мне контроль над стартовой строкой

awk 'NR % 4 == 0'

Ответы [ 4 ]

0 голосов
/ 16 ноября 2018

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

sed -ne '1~4w file1' -e '2~4w file2' -e '3~4w file3' -e '4~4w file4' file
0 голосов
/ 14 ноября 2018

В одном awk вы можете сделать:

awk '{print > ("file" (NR%4))}' inputfile

Это отправит вывод в файлы file0, file1, file2 и file3

0 голосов
/ 14 ноября 2018

ИМХО awk - лучшее решение.Вы можете использовать sed:
Inputfile, сгенерированный с помощью seq 12:

for ((i=1;i<5; i++)); do 
   sed -n $i~4w$i.out <(seq 12)
done

Здесь w$i.out записывает в файл $ i.out.

0 голосов
/ 14 ноября 2018

Вы можете использовать эти awk команды:

awk -v n=1 'NR%4 == n%4' file
20
14

awk -v n=2 'NR%4 == n%4' file
18
30

awk -v n=3 'NR%4 == n%4' file
21
40

awk -v n=4 'NR%4 == n%4' file
16
24
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...