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

更多推荐

章节目录