高级过滤器awk

一、简单过滤功能

awk '/abc/{print}'  test 

awk '/abc/'  test 

awk '/abc/{print $0}'  test

说明:默认情况下可以不加print


二、把一行拆分成字段

awk -F"|" '/abc/ {printf $2 $3}' test (意思是以|为分隔符,搜索有abc的行并输出第二个和第三个字段的字符)

awk -F "|" 'NR==3,NR==6' test (输出第3行到第六行)

说明:$0 是整行,默认情况下以空百串为分隔符


三、printf格式化输出

 awk '/^int/{printf "%d %-10s %10s\n",NR,$1,$2}'  test.cpp (按照printf的格式输出字段,NR是行号,-10表示左对齐,正10表示右对齐)


四、awk中变量和表达式

(1)awk中没有数据类型,自定义的变量也不需要初始化,默认为0或者空字符串

(2)变量区分大小

(3)八进制数前要用\,十六进制前面要用\x

(4)awk没有连接字符串的运算符,只要把字符串排列在一起就可以自动合并

(5)以下为以下例子

1、x = “5”;print x;

2、x= 'sum";y="com“ 

print x y  (结果是 sumcom)

print x"."y (sum.com)

3、 x="5";y=6;z="A"

print xy (56)

print x+y (11)

print y+z (6)

说明:如果字符串里面不含数字字符的时候,awk就把它当做是0

if(x) 只有当x是一个非空字符串或者是一个正数的时才为真


五、根据字段筛选信息

awk -F ”|“ ‘$3==”abc" || $4==“efg” {printf %s, $1}'  test (注意这里的是全匹配,而不是部分匹配)

awk -F "|" 'S3 ~/abc/ {printf %s, $1}'  test (用~来匹配部分,取反用!~)

awk '$2 > 10 {printf %s, $1}'  test (数值比较)


 六、变量

awk  -F "|" '$3>10{count++ printf “%d %s”,count,$0}' test


七、-f可选项,从文件中读取awk程序

假设example.awk文件里面保存如下($3>10{count++ printf “%d %s”,count,$0})

则命令awk -F “|” -f example.awk test

说明:文件中的命令不需要添加引号


八、BEGIN段和END段

awk  -F "|" '{BEGIN printf "begin program"} $3>10{count++ printf “%d %s”,count,$0} {END printf "end program"}' test

说明:begin与end用来输出一下头和尾的信息,这里可用#注释语句


九、内置变量

NR       行号

FS       输入字段的分隔符

OFS 输出字段的分隔符

NF 一行内的字段个数

FILENAME 当前的输入文件名

ARGC 命令行的参数个数

ARGV 参数列表



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值