AWK使用高级技能

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:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,469评论 0 9
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,594评论 0 4
  • awk: grep,sed,awk grep:文本过滤 sed:文本编辑 awk:文本格式化工具; 1 什么是aw...
    木林森阅读 1,823评论 0 16
  • 本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...
    楠人帮阅读 1,292评论 0 8
  • awk命令的基本使用 [root@shellscript ~]# head -n 3 /etc/passwd | ...
    古寒飞阅读 1,079评论 0 2