Shell脚本循环读取文件常用的方案有输入重定向和管道操作,循环形式有while和for两种,具体的使用或搭配看个人习惯,个人尚未对命令进行性能验证
该方案使用了输入重定向 + while ... do ... done 逐行读取。
# $file文件
file="./xxx.log"
# 循环读行
while read line
do
# 这里单纯执行一个输出
echo $line
# 业务代码块范围
done < $file
该方案使用了 cat 全文读取 + 管道 + while ... do ... done 逐行读取。
# $file文件
file="./xxx.log"
# 管道 + 循环读行
cat $file | while read line
do
echo $line
done
cat 全文读取,先读后循环,如果文件比较大不建议使用 cat。
大文件不建议用 cat,但是可以将 cat $file 替换成其他命令。
比如:tail -200 $file 只读取最后 200 行。
类似这样:
# $file文件
file="./xxx.log"
# 只读取最后200行 + 管道 + 循环读行
tail -200 $file | while read line
do
echo $line
done
其实 for 循环和管道方案类似。
管道是将命令放在 | 之前,for 循环是将命令用 xxx
包裹起来。
PS:XXX
` 符号表示执行命令,返回的是执行结果。
比如: info=ls
$info 就得到了目录下的内容。
# $file文件
file="./xxx.log"
# 读取全文后循环
for line in `cat $file`
do
echo $line
done
与管道类似,cat $file
也可以替换为其他内容实现条件读取。
比如:grep -e fail $file
只读取包含 fail 字符串的行。
重定向适合全文读取大文件。
如果需要全文读取,尽量不要用 cat。
在实际应用中,条件读取的场景比较多,具体是用管道还是用 for 就看个人习惯了。
温馨提示:系统将通过浏览器临时记忆您曾经填写的个人信息且支持修改,评论提交后仅自己可见,内容需要经过审核后方可全面展示。