跳过 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是解决方案之一。可以这样做,

tail +4 <<< "$LINE"

这将打印从第四行$LINE到最后一行的每一行。

如果你希望它的结果在内部使用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

相关内容