whileループの最初の3行をスキップします。

whileループの最初の3行をスキップします。

このコードがあります。

while IFS= read
do
    read -r
    read -r
    read -r

    echo $REPLY

done <<< "$LINES"

行のデータは次のとおりです。

----
Test
---- 
1,2,3 
1,2,4 
etc

最初の3行をスキップして4行から処理を開始したいと思います。 read -rを試しましたがうまくいかないようです。私は出力が欲しい:

1,2,3 
1,2,4 
etc

答え1

これはbashに特化した構文です。

i=3 n=0
while read -r line; do
  ((n >= i )) && echo "$line"
  ((n++))
done < file

答え2

変数の内容が前述のものと似ていることを考慮すると、4行目からデータを読み取ることも$LINE解決策の1つです。あなたはこれを行うことができます、

tail +4 <<< "$LINE"

$LINEこれにより、4行目から最後の行まですべての行が印刷されます。

結果を内部で使用したい場合は、whileこれがうまく機能します。

while IFS= read -r; do echo $REPLY; done <<< "$(tail +4 <<< "$LINE")"

答え3

電線で何をしたいのかによって異なりますが、電線で包むことができればもう一度電話するbashバージョン4以降の場合mapfile(または同義語readarray)および-s(スキップ)オプションを使用できます。

前任者。与えられた

$ echo "$LINES"
----
Test
---- 
1,2,3 
1,2,4 
etc

その後、定義した後

myfunc() { printf "%s\n" "$2"; }

あなたはできます

$ mapfile -t -s3 -c1 -C 'myfunc' <<< "$LINES"
1,2,3 
1,2,4 
etc

関連情報