awk 简介
2015-10-26 17:51
369 查看
– Start
很多人以为 awk 是一个 Linux 命令,其实 awk 是一种编成语言。下面是一个使用 awk 的典型例子。
典型的 awk 分为三部分。
BEGIN 部分只执行一次,用来初始化一些变量,打印表头等。
END 部分也只执行一次,用来在处理完文件后执行一些扫尾工作。
中间是处理文件部分,awk 逐行处理文件,对于每一行,它都会执行一次中间的语句。
中间的语句又分为两部分。
模式(Pattern)部分,它其实就是判断语句,判断是否执行它后面的语句。awk 支持如下形式的模式。
动作(Action)部分,真正的处理文件部分,如:{empty_row_count++}
awk 被设计用来处理结构化文件。下面的文件保存了一些交易记录。如果你要分析汇总这些交易记录,你不需要创建一个表,使用 SQL 语句分析,你也无需使用 perl 等功能更强大的语言。
假设让你汇总一下 ZhangSan 所有的 amount 该怎么办呢?试一试下面的命令吧。
-F 指定列分隔符,默认列分隔符是空格和制表符。
$0 引用整行, $1 引用第一列, $2 引用第二列 …
如果让你汇总一下所有人的amount 该怎么办呢?
怎么样?看不懂?等你学了数组就能看懂了。
– 更多参见:awk 精萃
– 声 明:转载请注明出处
– Last Updated on 2015-10-28
– Written by ShangBo on 2015-10-26
– End
很多人以为 awk 是一个 Linux 命令,其实 awk 是一种编成语言。下面是一个使用 awk 的典型例子。
# 统计空行数 awk 'BEGIN {empty_row_count=0} /^$/{empty_row_count++} END {print empty_row_count}' test.txt
典型的 awk 分为三部分。
BEGIN 部分只执行一次,用来初始化一些变量,打印表头等。
END 部分也只执行一次,用来在处理完文件后执行一些扫尾工作。
中间是处理文件部分,awk 逐行处理文件,对于每一行,它都会执行一次中间的语句。
中间的语句又分为两部分。
模式(Pattern)部分,它其实就是判断语句,判断是否执行它后面的语句。awk 支持如下形式的模式。
/regular expression/ relational expression pattern && pattern pattern || pattern pattern ? pattern : pattern (pattern) ! pattern pattern1, pattern2
动作(Action)部分,真正的处理文件部分,如:{empty_row_count++}
awk 被设计用来处理结构化文件。下面的文件保存了一些交易记录。如果你要分析汇总这些交易记录,你不需要创建一个表,使用 SQL 语句分析,你也无需使用 perl 等功能更强大的语言。
trade_id,trade_date,client,amount 1,2015-10-26,ZhangSan,100 2,2015-09-15,ZhangSan,50 3,2015-10-26,Lisi,200
假设让你汇总一下 ZhangSan 所有的 amount 该怎么办呢?试一试下面的命令吧。
awk -F, '$3=="ZhangSan"{amount+=$4} END {print amount}' test.txt
-F 指定列分隔符,默认列分隔符是空格和制表符。
$0 引用整行, $1 引用第一列, $2 引用第二列 …
如果让你汇总一下所有人的amount 该怎么办呢?
awk -F, 'NR > 1{map[$3]+=map[$3] + $4;} END {for (key in map) {printf("%s=%s\n", key, map[key]);}}' test.txt
怎么样?看不懂?等你学了数组就能看懂了。
– 更多参见:awk 精萃
– 声 明:转载请注明出处
– Last Updated on 2015-10-28
– Written by ShangBo on 2015-10-26
– End
相关文章推荐
- php定时执行计划任务,定时访问页面
- VCSA 5.5升级至VCSA6.0
- 【JAVA核心技术卷一】Object Oriented面向对象
- 【NOIP2013】【提高组】【Day1】【解题报告】
- Linux防火墙指定端口范围
- LoadRunner与JMeter的比较
- C语言之单位下三角矩阵求逆
- .net 大型分布式电子商务架构说明
- phpcms新增栏目字段_phpcms添加栏目属性
- Python上下文管理器
- 软件测试工具LoadRunner一个简单的测试
- Fragment的定义与基本使用
- 【推荐精读】从item-base到svd再到rbm,多种Collaborative Filtering(协同过滤算法)从原理到实现
- java程序运行时会存储到什么地方
- HTML与XML总结
- 浅谈微信卡券功能开发(3)
- Spring总结(二)(AOP)
- jQuery如何使用
- J2SE基础
- 使用LinearLayout实现ListView,解决ListView和ScrollView滚动冲突