我发布了以下代码并被骂了。为什么这是不可接受的?
numberOfLines=$(wc -l <"$1")
for ((i=1; $i<=$numberOfLines; ++$i)); do
lineN=$(sed -n "$i!d;p;q" "$1")
# ... do things with "$lineN"
done
Run Code Online (Sandbox Code Playgroud)
我们将输入文件中的行数收集到 中numberOfLines,然后从 1 循环到该数字,sed在每次迭代中从文件中提取下一行。
我收到的反馈抱怨说,sed在循环内部重复读取同一个文件以获取下一行效率低下。我想我可以使用,head -n "$i" "$1" | tail -n 1但这几乎没有效率,是吗?
有一个更好的方法吗?为什么我要避免这种特殊方法?