如何在“while read”过程中从特定行开始读取文件?

如何在“while read”过程中从特定行开始读取文件?

我想要的只是指定一定数量的行,例如这样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 像文件一样从中读取。当您想要避免在管道中创建的子 shell 的影响时,它非常方便。

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 行开始读取文件到末尾。

相关内容