linuxshell逐行读取文件行


读取文件行

for
命令替换 代码块重定向 while
管道符 代码块重定向

for

IFS=$'\n'
for line in `ls -l`
do
    (( count++ ))
done
echo $count

注意:
for读取时,自动按空格作为间隔符。因此需要将IFS定义为按换行符分隔

ls -l > forout.log
maxlength=$(wc -l < forout.log)
for i in `seq $maxlength`
do
    (( count++ ))
done < forout.log
echo $count

注意:
wc 需要使用重定向方式,否则输出的格式是”行数 文件名”。

while

while read line 
    do
        (( count++ ))
    done < readFile.log
    echo $count

注意
如果while条件表达式没有写read,则会输出line,但最后结果是一样的

    cat readFile.log | while read line
    do
        #(( count++ ))
        echo "$line"
    done
    #echo $count

注意
最后输出的count是空值,感觉是因为一个管道符生成了一个子进程,而子进程的变量无法返回父进程

time

ime命令 用于 打印出一条命令或一个程序的执行时间
time 命令以秒为单位将一条命令执行期间所用的时间、系统时间和 time 命令的执行时间打印在标准错误中。
用法:time [ -p ] Command [ Argument … ]
time命令结果有三行组成:real、user和sys。我们这里用的都是real值,CPU用时被划分为user和sys两块。

real值表示从程序开始到程序执行结束时所消耗的时间,包括CPU的用时。 user值表示程序本身,以及它所调用的库中的子例程使用的时间。 sys是由程序直接或间接调用的系统调用执行的时间。

测试上述四种方法
1.
real 0m0.022s
user 0m0.000s
sys 0m0.004s

2.
real 0m0.066s
user 0m0.004s
sys 0m0.016s

3.
real 0m0.001s
user 0m0.000s
sys 0m0.000s

4.
real 0m0.015s
user 0m0.000s
sys 0m0.008s

相关内容