本文共 1144 字,大约阅读时间需要 3 分钟。
– Start
很多人以为 awk 是一个 Linux 命令,其实 awk 是一种编成语言。下面是一个使用 awk 的典型例子。# 统计空行数awk 'BEGIN {empty_row_count=0} /^$/{empty_row_count++} END {print empty_row_count}' test.txt
典型的 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