「while read」内で特定の行番号からファイルを読み取るにはどうすればよいでしょうか?

「while read」内で特定の行番号からファイルを読み取るにはどうすればよいでしょうか?

私がしたいのは、このように特定の行数を指定してlineNumberIs=3、読み取り中にこの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 行目から最後までファイルの読み取りが開始されます。

関連情報