博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk 简介
阅读量:4049 次
发布时间:2019-05-25

本文共 1144 字,大约阅读时间需要 3 分钟。

– Start

很多人以为 awk 是一个 Linux 命令,其实 awk 是一种编成语言。下面是一个使用 awk 的典型例子。

# 统计空行数awk 'BEGIN {empty_row_count=0} /^$/{empty_row_count++} END {print empty_row_count}' test.txt

典型的 awk 分为三部分。

  1. BEGIN 部分只执行一次,用来初始化一些变量,打印表头等。
  2. END 部分也只执行一次,用来在处理完文件后执行一些扫尾工作。
  3. 中间是处理文件部分,awk 逐行处理文件,对于每一行,它都会执行一次中间的语句。

中间的语句又分为两部分。

模式(Pattern)部分,它其实就是判断语句,判断是否执行它后面的语句。awk 支持如下形式的模式。

/regular expression/relational expressionpattern && patternpattern || patternpattern ? pattern : pattern(pattern)! patternpattern1, pattern2

动作(Action)部分,真正的处理文件部分,如:{empty_row_count++}

awk 被设计用来处理结构化文件。下面的文件保存了一些交易记录。如果你要分析汇总这些交易记录,你不需要创建一个表,使用 SQL 语句分析,你也无需使用 perl 等功能更强大的语言。

trade_id,trade_date,client,amount1,2015-10-26,ZhangSan,1002,2015-09-15,ZhangSan,503,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

怎么样?看不懂?等你学了数组就能看懂了。

– 更多参见:

– 声 明:转载请注明出处
– Last Updated on 2015-10-28
– Written by ShangBo on 2015-10-26
– End

你可能感兴趣的文章
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>