UNIT34 awk Patten

# awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test  //$1大于5打印ok

O.‘模式’是一种表达式

1./(RE)/:加圆括号以确保正确的值。

2.比较表达式中两操作数都是数进行数值比较,否则进行串比较。

3.awk字符类是一种特殊的方括号表达式,此概念来自于POSIX 标准,用于描述具有某种特定属性的字符集合。常用字符类有:

[:alnum:] 字母或数字字符

[:alpha:] 字母字符

[:blank:] 空格或制表符

[:cntrl:] 控制字符

[:digit:] 数字字符

[:lower:] 小写字母字符

[:graph:] 既能看见又能打印的字符

[:print:] 可打印字符(非控制字符)

[:punct:] 标点符号字符

[:space:] 空白字符,包括空格.制表.换页等

[:upper:] 大写字符

[:xdigit:] 十六进制数字字符

.BEGIN|END (特殊模式,与内容无关,只执行1)

1.BEGIN{action}处理第一条记录之前将BEGIN后面大括号之内的动作运行且只运行一次。BEGIN 通常用来设置变量。

#awk 'BEGIN{var="500"} {if ($3<var) print $0}' /etc/passwd

#awk 'BEGIN{RS=""} /root/' /etc/passwd        //段落 grep

通过awk+正则把括弧里的字段取出来,file.txt内容如下:

groups=001(group1),

002(group2),

003(group3)

#awk 'BEGIN{FS="[()]"}{print $2}' file.txt

group1

group2

group3

2.END{action}处理完最后一条记录之后将END后面大括号之内的动作运行且只运行一次。可在程序结束后输出一些消息。

#awk 'END {print NR}'   passwd

#awk '{nlines++}END {print nlines}' passwd

#awk '//;END {print "**";print "End"}' /etc/passwd

#ls -l files | awk '{x += $5};END {print "total bytes: " x}'  显示出所有文件的总字节数

./RE/与/re1/,/re2/(支持\ ^ $ . [] | () * + ?)

1.匹配单个模式

# awk '/x.*x/' /etc/passwd

# awk '/root/ { print }' /etc/passwd

# awk '/^(no|so)/' test               打印所有以模式no或so开头的行

# awk '/test/{print $1 + 10}' test    记录包含test,则$1加10并打印

# awk '/^[ns]/{print $1}' test        打印以n或s开头的记录

2.匹配模式范围

与其他的搜索不同,范围模式在匹配文本时可跨越不同的记录。它输出包含匹配项部分内容的完整的记录。

#awk '/root/,/mail/' /etc/passwd

.条件表达式

1.2个匹配运算符:~   ~!

# echo 1|awk '$0 ~/^[0-9]*$/ {print $0 " is a integer"}'

1 is a integer

# awk '$0 ~/^root/' /etc/passwd

# ls|awk '$0 ~ /progam[0-9]+\.c/ { print $0 }'     找progam[0-9]+.c的文件

# awk '$3 ~/s/' /etc/passwd                        $3包含s字符的记录

# awk 'BEGIN {FS=":"} $7 !~ /bash/ {print $5}'  passwd  不是bash的用户全名

# awk 'BEGIN{FS=":";} {if ($3>499) print $1 "@zcs.cn"}' /etc/passwd

# awk '$1 ~/[09][09]$/(print $1}' test                      $1以两个数字结束就打印

2.6个关系运算符:< > <= >= == !=

#awk ‘length($0)<=80 {print $0}’    /etc/passwd

#awk '$3 > 500 {print "Normal user"}' /etc/passwd

# awk -F: '$1=="360565687" && $2=="15026736523"' list.txt

 .使用布尔操作符的复合模式 (&&,||,!)

#awk ‘($1 < 5 ) && ($2 > 8) {print "ok"}’ file1

#awk '/^d/     ||    /x$/   {print "ok"}'   file1

# awk 'FNR>=1 && FNR<=2' /etc/passwd

# awk 'FNR==1,FNR==3' /etc/passwd

# awk -F: '/root/&&/bash/{print $6}' /etc/passwd

# awk -F: 'BEGIN{ORS=""}!/oprofile/&&(/home/||/bash/){print $1"\n"}' passwd


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值