Dev Python
Dev Python

Reputation: 185

Bash - Read lines from file with intervals

I need to read all lines of the file separating at intervals. A function will execute a command with each batch of lines.

Lines range example:

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

I tried with the sed command in a forloop, but the range does not go to the end of the file. For example, a file with 125 lines reads up to 121, missing lines to reach the end.

I commented on the sed line because in this loop the range goes up to 121 and the COUNT is 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

Output:

1
21
41
61
81
101
121

Thanks!

Upvotes: 0

Views: 662

Answers (1)

markp-fuso
markp-fuso

Reputation: 34324

Quick fix - ensure the last line is processed by throwing $COUNT on the end of of values assigned to i:

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

1
21
41
61
81
101
121
125

If COUNT happens to be the same as the last value generated by seq then we'll need to add some logic to skip the second time around; for example, if COUNT=121 then we'll want to skip the second time around when i=121, eg:

# 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

Upvotes: 1

Related Questions