美文网首页
AWK使用高级技能

AWK使用高级技能

作者: fred290 | 来源:发表于2017-09-30 11:56 被阅读0次

AWK程序结构

一般来说,我们每一个 awk 程序都是由一个或多个 模式–动作 语句组成的序列:

pattern { action }

pattern { action }

...

awk 的基本操作是在由输入行组成的序列中, 陆续地扫描每一行, 搜索可以被模式 匹配 (match) 的行,然后执行后面的动作。

$ awk '$3 == 0 { print $1 }' examp.data

上面的程序是模式与动作的典型例子. 程序

$3 == 0 { print $1 }

因为模式与动作都是可选的, 所以用花括号将动作包围起来, 以便区分两者

内建变量

一般来说awk有以下常用内建变量:

变量 字段代表意义
0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字

正则表达式

匹配

为使一域匹配一正则表达式,可以使用以下两种方法:

  • $n~正则表达式

  • if($n~正则表示式) print $0

以,作为分隔符,第4列含有一个或多个字符a

awk -F ',' '{if($4~/a+/) print $2 "\t\t" $4}' command

打印以root开头的行

awk -F: '$0 ~ /^root/' /etc/passwd

和上一句等效

awk -F: '{if($0 ~ /^root/) print $0}' /etc/passwd

精确匹配

打印名字为root的用户在/etc/passwd文件中的记录

awk -F : '$1=="root" {print $0}' /etc/passwd

打印路径为/root的用户在/etc/passwd中的记录

awk -F : '$6=="/root" {print $0}' /etc/passwd

相关文章

网友评论

      本文标题:AWK使用高级技能

      本文链接:https://www.haomeiwen.com/subject/abygextx.html