用 awk 统计文本文件中的某一列之和 (附 awk 命令简介)
2016-03-15 17:25
399 查看
awk -F'\t' -v sum=0 '{sum += $1} END{print sum}' file_name
统计输出结果的最后一列之和:
result | awk -F'\t' -v sum=0 '{sum += $NF} END{print sum}'
附: awk 命令简介
Unix / Linux 系统中,多用纯文本文件表示一些带格式的内容,比如就像数据库里面的一个 table 那样的格式。这个时候,默认一行(以"\n"结束的一个字符串)为一条记录(一个 record ), 一行中用特定的分隔符(默认是 "\t" )分割的值为一个域( field )。awk 命令就是专门用来处理这样的文件的,它把文件中的每一个 record 作为一个独立的处理单元。也就是说,你写 awk 脚本的时候,直接想象它处理的对象是一个 record 就对了。并且,在 awk 里面,用$n (n=1,2,...,NF)表示该
record 中第 n 个 field 的值,其中NF是 record 中 field 的个数。
awk 命令的基本格式:
awk '[BEGIN{statements}] {statements} [END{statements}]' file_name
其中 [] 里面的内容是可选项,也就是说没必要的话可以不写。所以简化之后的 awk 命令的基本形式是:
awk '{statements}'
statements 表示处理语句的序列。
需要记住的是,awk 的那些操作语句,包括 BEGIN{}、 {}、 END{},必须都放在同一对单引号('')之中,就像上面写的那样,单引号是不能省略的。
有了上述知识,读者应该已经明白了该如何写 awk 命令了。下面通过一些例子来进一步介绍这个命令。
假如 t1.log 的内容为(请将空白地方换成制表符 "\t"):
1 2 3 4 5
5 6 7 8 9 10
例1,输出文件 t1.log 的第一列:
awk '{print $1}' t1.log
输出为:
1
5
这里需要说明的是,awk 中的 print 命令会默认地在最后加上一个换行符 "\n"。
例2,输出文件 t1.log 的第3和第5列:
awk '{print $3, $5}' t1.log
输出为:
3 5
7 9
这里需要说明的是,如果你在print里面用逗号(,)分割要输出的内容,那么 awk 把逗号(,)换做默认的分隔符来输出(一般为 “\t" )
例3,输出 t1.log 每一行的最后一列:
awk '{print $NF}' t1.log
输出为:
5
10
到这里,读者应该已经能够用 awk 做一些简单的操作了,比如查看一个格式化文件里面你感兴趣的那些属性。但是,上面的知识还远不够发挥 awk 的功能。我们再看一个复杂一些的例子。
例4,统计文件 t1.log 中最后一列中大于 5 的那些域的和,并将其输出:
awk -v sum=0 '{if($NF>5) sum+=$NF} END{print sum}'
输出为:
10
这里面需要说明的有几条。第一,用 -v 参数来指定 awk 的输入变量。比如上例中的 " -v sum=0 " 的含义是,在 awk 的操作部分里(单引号 '' 之中的部分),sum是作为一个变量可用的,并且它的初始值为0。第二,awk 的BEGIN、主体、END部分里面,statements是可以很复杂的,比如加入一些判断语句。第三,我们一般在 awk 的BEGIN 部分做一些初始化工作,主体部分来操作每一行(也就是每一个 record ),END 部分做后处理并输出结果。
到这里为止,我们掌握的 awk 操作还远未达到它的处理能力。 awk 是可以用来编程的,并且有一些内置的函数可以调用。如果能够结合其他的 shell 命令,那么 awk 可以做很多你想象不到的事情。
本来来自:http://#.com/zhleilei/blog/item/829212d77d6014d4a144df9c.html
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍