用 awk 统计文本文件中的某一列之和 (附 awk 命令简介)
来源:互联网 发布:淘宝天天特价明天预告 编辑:程序博客网 时间:2024/05/22 05:30
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
0 0
- 用 awk 统计文本文件中的某一列之和 (附 awk 命令简介)
- awk常用命令---统计某一列标签个数
- 用awk命令计算文件中某一列的总和
- 使用awk命令获取文本的某一行,某一列
- Shell命令--使用awk取某一列数据
- awk命令统计访问量
- awk命令简介
- awk命令简介
- awk命令简介
- awk命令简介
- awk命令简介
- awk命令简介
- Linux awk命令简介
- awk命令简介
- Awk命令简介
- Linux:使用awk命令获取文本的某一行,某一列
- Linux:使用awk命令获取文本的某一行,某一列
- Linux:使用awk命令获取文本的某一行,某一列
- 快速排序 约瑟夫问题 顺序查找 二分查找
- gdb debug指令介绍
- 杀京东价格监控软件项目开发日志
- Linux编程(多线程编程)
- 修改xib里的控件位置大小
- 用 awk 统计文本文件中的某一列之和 (附 awk 命令简介)
- Jenkins上分析前端项目
- 如何写好简历
- Android实际开发中用到的线程池
- debug开启后就这错误了,,求大神指点。。。。
- Android获取控件大小的方法
- 畅通工程 杭电1232
- struts2接收前台参数的3个方法
- linux下configure命令详解