awk应用获取文件的信息(二)

本文发布时间: 2019-Mar-22
我们所编写的操作将应用于所有的输入行。当awk读入所有的输入行后,所产生的总数必须打印出来,因此,我们编写了一个由END规则控制的操作:END { print "Total: ", sum, "bytes (" filenum " files)" }我们还可以使用BEGIN 规则给报告增加列标题。BEGIN { print "BYTES", "\t", "FILE" }现在,我们将这些程序代码放在文件filesum中并作为一个命令运行。$ ./filesum c*BYTES FILE882 ch011771 ch031987 ch046041 com.tmp1778 combine.idxTotal: 12459 bytes (5 files这个命令的优点是能够确定一个目录中文件的大小。在显示基本机制之后,还需要注意几个问题。第一个问题出现在当使用ls -l命令显示整个目录时,列表中包含一个指定目录中块的总数的行。在前面例子(所有以"c" 开头的文件)中的部分列表中没有包含这一行。但是如果整个目录都列出来,那么在输出中将会包含下面的一行:total 555我们对块总数并不感兴趣,因为程序显示了文件的总的大小。现在filesum没有打印这一行,但是它读入了这一行并使计数器filenum得到了递增。这个脚本还有一个问题,也就是它如何处理子目录。参见下面ls -l 执行结果中的一行:drwxrwxrwx 3 dale project 960 Feb 1 15:47 sed第一列(文件的操作权限)中的首字符"d"表示该文件是子目录。文件的大小(960B)并不表示子目录下的文件的大小,因此,经常错误地把这个数加到文件总的大小上。因此,指出这是一个目录可能是有用的。如果想列出子目录中的文件,可以在命令行中提供-R(递归)选项。该选项将传递给ls命令。然而,当它识别每个目录时,列表有一些区别。例如,要识别子目录old, ls -lR将产生一个空行,跟随:"./old"我们前面的脚本忽咯了这行及其前面的空行,但是仍然递增文件计数器。幸运的是,我们可以设计规则来处理这类情况。我们来看下面修改后的、加了注释的脚本,请参照下一节的内容。参考资料:http://www.linuxawk.com/communication/519.html


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:09pm
栏目列表