shell使用“$*”变量来扩展通过命令行传递的所有变量。如果没有指定参数,“$*”将为空。
ls -l $*
这里因为$*为空,ls将显示当前目录。ls命令的输出可以传递给awk。
下面的命令打印第5和第9个字段。
ls -l $* | awk '{print $5 "\t" $9}'
结合之前的知识点,下面利用变量实现计算列表文件的数量和总共大小
这里sum和filenum两个变量作为计数器。sum用于计算文件大小总和,filenum计算文件总数。其实filenum计算的是行数,可以直接引用NR。
我们还可以使用BEGIN模块添加列标题,提升可读性。
当然这个计算算法有缺陷,首先ls -l $* 输出第一行是文件总数,这个对于计算文件总数有影响,不应该累加进来。
其次结果中包含了目录,目录不仅影响了对文件数量的统计,也影响了对文件大小计算。
下面对算法进行改进:
首先可以跳过第一行的方法,解决第一个问题。
NR > 1 { sum +=$5 ; ++filenum}
第二个问题我们使用正则来判断,如下
$1 ~ /^-/{sum +=$5;