📖Shell脚本利用循环实现逐行读取文件

发布: 2021-05-28
热度: 42
趋势: 42
权重: 0
🎯

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 就看个人习惯了。

当前文章暂无讨论,留下脚印吧!
大纲
  • 常见写法
  • 管道操作
    • 条件读取
  • for 循环语法
  • 小结
提交成功,请等待审核通过后全面展示!

发表评论

昵称
邮箱
链接
签名
评论

温馨提示:系统将通过浏览器临时记忆您曾经填写的个人信息且支持修改,评论提交后仅自己可见,内容需要经过审核后方可全面展示。

选择头像