Linux-shell脚本逐行读取文件

我们在日常工作中经常会遇到读取文件的需求,一般我们用开发语言可以原生的API来简单实现对应的功能。如果我们是在Linux环境下,通过shell脚本来读取文件内容又该如何操作的呢?本篇文章旨在入门Linux-shell脚本读取文件每一行内容,代码进攻参考,非喜勿喷。

1、for 循环

function  for_fn(){
 For  i  in  `cat $FILENAME`
  do
   echo $i
  done
}

注释:这种方式是通过for循环的方式来读取文件的内容相比大家很熟悉了,这里不多说.

2、文件描述符法

Function while_read_line_fd(){
Exec 3<&0
Exec 0<$FILENAME
While read LINE
Do
Echo $LINE
Exec 0<&<3
}

注释: 这种方法分2步骤,第一,通过将所有内容重定向到文件描述符3来关闭文件描述符0.为此我们用了语法Exec 3<&0 。第二部将输入文件放送到文件描述符0,即标准输入。

3、重定向法;管道法: cat $FILENAME | while read LINE

Function While_read_LINE(){
cat $FILENAME | while read LINE
do
echo $LINE
done
}

注释:我只所有把这种方式叫做管道法,相比大家应该可以看出来了吧。当遇见管道的时候管道左边的命令的输出会作为管道右边命令的输入然后被输入出来。

4、while循环中执行效率最高,最常用的方法。

function while_read_LINE_bottm(){
While read LINE
do
echo $LINE
done  < $FILENAME
}

注释:我习惯把这种方式叫做read釜底抽薪,因为这种方式在结束的时候需要执行文件,就好像是执行完的时候再把文件读进去一样。

# 对各个方法进行测试,看那方法的执行效率最高。  ----(70000行的文件)
real    0m5.153s    method 4 (for 循环法)
real    0m5.689s    method 1  (while 釜底抽薪法)
real    0m5.853s    method 3    (标识符法)
real    0m11.612s  method 2    (管道法)