AWK学习笔记

AWK是一个强大的文本分析工具,LinuxUnix环境中现有的功能最强大的数据处理引擎之一。AWK在很多方面类似于Unix shell编程语言,尽管AWK具有完全属于其本身的语法。它将文件作为记录序列处理。在一般情况下,文件内容的每行都是一个记录。AWK一次可以读取一个输入行。对每个输入行,AWK解释器会判断它是否符合程序中出现的各个模式,并执行符合的模式所对应的动作。

AWK程序是由一系列模式/动作对组成的,写做:

pattern { action }

Shell

其中pattern表示AWK在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。

输入行被分成了一些记录:记录默认由换行符分割,因此输入会按照行进行分割。程序使用给定的条件一个个的测试每条记录,并执行测试通过的条件所对应的action。pattern和action都可以省略不写。无pattern默认匹配全部的记录;而无action则是打印原始记录。

将文件内的每一行以空格分隔,打印每一行的第五列:

awk '{print $5}' {{filename}}

Shell

通过正则表达式匹配文件内的每一行,然后将行内容以空格分隔,打印每一行的第二列:

awk '/{{regexp}}/ {print $2}' {{filename}}
awk '$1 ~ /{{regexp}}/ {print $2}' {{filename}}

Shell

指定分隔符,输出每一行的列的数量

awk -F ',' '{print $NF}' {{filename}}

Shell

语句定义

可以快速的用单引号’ ’,把所有语句写成一行; 也可以用-f 指定文件,文件里可以任意换行,增加可读性和重用性; 所有执行语句用{}括起来,{}的外面是一些高级的东西比如过滤条件; 另外如果打印整列,{print} 可省略不写;

内置常量

常量 释义 备注
NR 行号 Number of row
NF 列号 Number of field

列引用

1代表第一列(终于不是程序员数数从0开始了); NF是个代表总列数的系统变量,所以(NF-1)来表示倒数第二列; 还支持列之间的运算,如(NF-1)是最后两列的值相减; 只写一个print 是 print $0的简写,打印整行所有数据;

参考资料

  • Wikipedia - AWK

你可能感兴趣的:(AWK学习笔记)