печатать указанное количество строк в файле до конца - PullRequest
2 голосов
/ 08 января 2020

Краткое описание проблемы, с которой я столкнулся, для которой я не смог найти подходящего решения:

У меня есть файл с 8000 правилами журнала, и мне нужно каждый раз печатать 100 строк, и netcat это пункт назначения. После попадания в конец файла я хочу, чтобы он вернул l oop в начало файла и начинал процесс снова, пока я не остановлю цикл вручную. Это делается для проверки нашей среды на количество событий в секунду в течение определенного периода времени.

Я видел несколько примеров в 'sed', чтобы напечатать определенное количество строк из файла, но не то, как оно продолжается до следующих 100 строк и следующих 100 строк после этого (и так далее). ,

У кого-нибудь есть подходящее решение? Это должно быть намного проще, чем я думаю.

1 Ответ

2 голосов
/ 08 января 2020

Чтобы напечатать каждые 100 строк файла, вы можете использовать sed:

#!/bin/bash

# line increment
inc=100

# total number of lines in the file
total=$(wc -l < input_file)

for ((i=1;i<total;i=i+inc)); do
   sed -n "$i,$((i+inc-1))p" input_file
done

Как упоминалось в комментарии, вы можете перенаправить вывод в netcat, например, { for ((i=1;i<total;i=i+inc)); do ... done } > netcat [-options]. Затем оберните все это непрерывным l oop, чтобы повторить.

В качестве альтернативы можно использовать split.

inc=100
split --filter "netcat [options]" -l$inc input_file
...