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

继续前面两节的内容,我们来看下面修改后的、加了注释的脚本:

#!/bin/bash

ls -l
$* | awk ‘

/* filesum: 列出文件总的字节数*/

/* 输入:由命令"ls -l"生成的长列表*/

/*#1 输出列的标题*/

BEGIN { print "BYTES", "\t", "FILE" }

/*#2 测试第9个字段,文件以"-"开始*/

NF == 9 && /^-/ {

sum += $5        /*累计文件大小*/

++filenum        /*系统文件个数*/

print $5,"\t",$9 /*打印大小和文件名*/

/*#3 测试第9个字段,目录由"d"开始*/

NF == 9 && /^d/ {

print "<dir>", "\t", $9 # print <dir> and name

/*#4 测试ls -lR line ./dir:*/

$1 ~ /^\..*:$/ {

print "\t" $0 /*打印用制表符处理的行*/

/*#5 所有工作已完*/

END {

/*打印所有文件总的大小和文件数目*/

print "Total: ", sum, "bytes (" filenum " files)"

}‘

这里对规则以及与之相关的操作设置了编号,以便进行讨论。由ls -l产生的列表包含文件的9个字段。awk在系统变量NF中给出了一个记录中的字段的个数。因此,规则2和规则3测试NF是否等于9。这可以使我们避免与奇数空行或表示块总量的行匹配。因为我们希望对目录和文件做不同的处理,所以我们使用另一个模式来匹配行的第一个字符。在规则2中我们测试行的第一个位置的字符"-",这表示一个文件。如果匹配则递增与之相关的文件计数器并累计文件的大小。在规则3中我们测试一个目录,用"d"作为第一个字符来表示。相关的操作是在文件大小的位置上打印<dir>。规则2和规则3是结合表达式,用&&操作符将两个模式结合起来。两个模式都必须匹配表达式的值才为真。

规则4用于测试由ls -lR产生的列表的特殊形式( "./old;" )。我们可以使用正则表达式或关系表达式来编写一些匹配这一行的模式。

awk使用匹配操作符(~)来测试第一个字段是否匹配一个正则表达式。相关的操作只由一个print语句组成。

规则5是END模式,它的操作只被执行一次,用于打印出文件总的尺寸和数量。

程序filesum演示了awk中的许多基本的结构。更重要的是,它提供了如何编写程序的一个很好的思路。如果想修改以上程序,可以为目录增加一个计数器。

参考资料:http://www.linuxawk.com/communication/521.html

时间: 2024-10-29 02:49:21

awk应用-获取文件的信息(三)的相关文章

Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require 'common.func.php'; $path = 'file'; $path = @$_REQUEST['path'][email protected]$_REQUEST['path']:$path; $info = readDirectory($path); if($info == NULL){ e

C# 实现访问FTP服务器下载文件,获取文件夹信息小记

最近因为要开发广告制作工具,自动生成广告流,需要获取第三方服务器上的文件资源,经过摸索,从这次经历中记录下. FtpWebRequest reqFtp; WebResponse response = null; //获取文件夹信息 reqFtp = (FtpWebRequest)WebRequest.Create(this.ftp);//ftp://IP:port/文件夹名1/文件夹名2/.../文件夹名 reqFtp.UseBinary = true; reqFtp.KeepAlive = f

第九篇:使用 lstat 函数获取文件信息

前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个目的. 下面的程序将使用该函数获取文件类型信息并判断它的类型. 但在这之前,先要说明文件信息结构体和文件类型判定宏. 文件信息结构体 调用 lstat 函数将会把指定文件的信息存放到 stat 结构体中,这个结构体的定义大致如下: 文件类型判定宏 文件结构体中的文件类型字段是一个整数,对此,可以使用

Stat(),Lstat(),Fstat() 获取文件/目录的相关信息

stat 的使用 Linux有个命令,ls -l,效果如下: 这个命令能显示文件的类型.操作权限.硬链接数量.属主.所属组.大小.修改时间.文件名.它是怎么获得这些信息的呢,请看下面的讲解. stat 的基本使用 stat:返回一个与此命 需要包含的头文件: <sys/types.h>,<sys/stat.h>,<unistd.h> 函数原型: int stat(const char *path, struct stat *buf);      int fstat(in

Linux获取文件信息

项目中需要对文件进行处理并分析,首先需要根据要求找到该文件,比如最后修改的文件 代码实现: 1 #include <unistd.h> 2 #include <sys/stat.h> 3 #include <time.h> 4 5 #include <iostream> 6 7 using namespace std; 8 9 int main(int argc, char **argv) 10 { 11 struct stat STFile; 12 sta

node 的fs.state 获取文件信息

1. fs.stat()可以获取文件的信息,用法如下: const fs = require('fs'); fs.stat('./book.js',(err,stats)=>{ if(err) throw err; // 可以利用此处判断文件是否存在,不存在会报err. console.log(stats.isFIle())//判断是否为文件 console.log(stats.isDirectory())//判断是否为文件夹 console.log(stats) //打印文件相关信息 }) 原

使用JavaAPI获取文件信息

package demo; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; import org.apache.hadoop.fs.FileS

ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,

一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名空间(相当于根目录)ThinkPHP\Libray*在初始命名空间下又包含很多根命名空间,这些根命名空间主要分两类:1.TP核心类里面的根(系统文件)        在Libray下,有几个文件夹就有几个根(所有的文件夹都是根)2.APP里面的根(自定义文件)        APP里面的根是以模块名

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭