我读过使用“for”不是在 bash 中读取行的好方法。许多人说这充其量是笨拙和低效的,并且在很多情况下都失败了。
我想知道在 bash 中阅读行的最佳方式是什么。谢谢。
例如:
$ for i in $(<afile); do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)
use*_*686 17
您正在谈论for line in $(cat file); do和类似的构造。这是:
cat,将cat输出——整个文件——读入内存,解析它(这是最慢的部分),然后才迭代所有数据(如果使用$(<...)而不是$(cat ...),则在 Linux 上可以节省两毫秒,但所有其他缺点仍然存在。)
更好的选择是在循环中使用:readwhile
while read -r line; do
echo "Input: $line"
done < myfile.txt
Run Code Online (Sandbox Code Playgroud)
或者从一个程序:
cat file1 file2 file3 |
while read -r line; do
echo "Input: $line"
done
Run Code Online (Sandbox Code Playgroud)
这只读取需要的量,不执行不必要的处理,但允许自定义字段拆分,并且在大文件上速度快许多倍,资源需求更少。
如果您尝试使用 的输出find,则应使用相同的模式:
find . -name "foo" -type f -print0 | while read -r -d '' file; do
echo "File: $file"
done
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |