Shell脚本利用循环实现逐行读取文件
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 循环和管道方案类似。
管道是将命令放在 | 之前,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 就看个人习惯了。
