我有这个代码。
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