a.sh

cat in|while read s
do call "$s"
done

Это нужно изменить, чтобы он работал только для строк arg+n. например: a.sh 5

    cat in|while read s
n=10
for lines arg0 through arg0+n
    do call "$s" 
    done

2 ответа2

0
lines=10
current=0
while read line; do
   current=current+1
   if [ "$current" -gt "$lines" ] then exit 0; fi
   if [ "$current" -gt "$1" ] then call "$line"; fi
done < in
0

Будет быстрее и чище отфильтровать входные данные до соответствующих строк перед передачей их в цикл чтения:

n=10
start=$1
end=$((start+n))
cat in | sed "${start},${end}!d" | while read s; do
    call "$s"
done

Примечание: при печати строк от $ 1 до $ 1+n фактически будет напечатано n+1 строк (например, при печати строк с 5 по 15 на самом деле 11 строк). Если вы хотите напечатать n строк, начинающихся с $ 1, используйте end=$((start+n-1)) .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .