Как прочитать файл, начиная с определенного номера строки в течение «пока читается»?

Как прочитать файл, начиная с определенного номера строки в течение «пока читается»?

Все, что мне нужно, это указать определенное количество строк, например, вот так, lineNumberIs=3и указать во время чтения начинать с этой третьей строки или с какого-либо другого номера строки, а затем извлекать строки, чтобы выполнить некоторые команды позже на извлеченных строках. Что-то вроде того

 while read line from $lineNumberIs
    do
    **some commands not just echo nor printing on the screen** 
    done < $dataFile

решение1

while IFS= read -r line; do
    # ...
done < <(tail -n "+$lineNumberIs" $dataFile)

tail -n +K(со знаком плюс) указывает tail начать с указанного номера строки (см.страница руководства).

Бит <(...)- этозамена процесса. Он позволяет вам указать последовательность команд и позволить bash читать из нее как из файла. Это очень удобно, когда вы хотите избежать эффекта подоболочки, созданной в конвейере.

IFS= read -rиспользуется для чтения строки именно так, как она указана в файле, без удаления пробелов и управляющих последовательностей.

решение2

#!/bin/bash
if [ $# -eq 0 ]; then
        echo "Please execute $0 with linestoskip parameter"
        exit 0
fi
linestoskip=$1
Counter=0
dataFile='/etc/fstab'
while read line
do
        if [ $Counter -ge $linestoskip ]; then
                echo $line
        fi
        Counter=`expr $Counter + 1`
done < $dataFile

Этот скрипт ожидает число строк, которые нужно пропустить, как параметр. Вы можете сделать все, что захотите, во внутреннем условии if.

решение3

Очень простое решение -

tail -n +K filename

где K = номер строки, с которой вы хотите прочитать файл. Это начнёт чтение файла с K-й строки до конца.

Связанный контент