Bash - чтение строк из файла с интервалами - PullRequest
0 голосов
/ 29 октября 2019

Мне нужно прочитать все строки файла, разделенные через определенные промежутки времени. Функция будет выполнять команду с каждой партией строк.

Пример диапазона строк:

1 - 20
21 - 50
51 - 70
...

Я попытался с помощью команды sed в цикле, но диапазон не заканчивается до концафайла. Например, файл со 125 строками читает до 121, пропущенные строки не доходят до конца.

Я прокомментировал строку sed, потому что в этом цикле диапазон увеличивается до 121, а COUNT - 125.

TEXT=`cat wordlist.txt`
COUNT=$( wc -l <<<$TEXT )
for i in $(seq 1 20 $COUNT);
do
echo "$i"
#sed -n "1","${i}p"<<<$TEXT
done

Вывод:

1
21
41
61
81
101
121

Спасибо!

1 Ответ

1 голос
/ 29 октября 2019

Быстрое исправление - убедитесь, что последняя строка обработана, бросая $COUNT в конце значений, присвоенных i:

for i in $(seq 1 20 $COUNT) $COUNT;
do
echo "$i"
done

1
21
41
61
81
101
121
125

Если COUNT совпадает с последнейзначение, сгенерированное seq, тогда нам нужно добавить логику, чтобы пропустить второй раз;например, если COUNT=121, то мы хотим пропустить второй раз, когда i=121, например:

# assume COUNT=121

lasti=0
for i in $(seq 1 20 $COUNT) $COUNT;
do
[ $lasti = $COUNT ] && break
echo "$i"
lasti=$i
done

1
21
41
61
81
101
121
...