Awk工作原理-输入方式(2)
[align=left]Awk[color=black][size=10.5pt]命令由:[/size][/color][color=black][size=10.5pt]awk[/size][/color][color=black][size=10.5pt]+[/size][/color][color=black][size=10.5pt]括在引号(或写在文件)中的程序指令[/size][/color][color=black][size=10.5pt]+[/size][/color][color=black][size=10.5pt]输入文件的文件名,这几部分组成。如果没有指定输入文件,输入则来自标准输入([/size][/color][color=black][size=10.5pt]stdin[/size][/color][color=black][size=10.5pt]),即是键盘的输入。[/size][/color] [color=black][size=10.5pt]其中程序指令指的是:匹配模式、操作(也就是前面讲的指定动作)或匹配模式与操作组合而成。[/size][/color][color=black][size=10.5pt][font=Arial]●[/font] [/size][/color][color=black][size=10.5pt]匹配模式指的是:某种类型的表达式组成的语句,例如正则表达式。[/size][/color]
[color=black][size=10.5pt][font=Arial]●[/font] [/size][/color][color=black][size=10.5pt]操作指的是:括在花括号[/size][/color][color=black][size=10.5pt]“{}”[/size][/color][color=black][size=10.5pt]里的一条或者多条语句组成,语句之间用分号或者换行符隔开。(有点像[/size][/color][color=black][size=10.5pt]C[/size][/color][color=black][size=10.5pt]语言的函数写法)[/size][/color]
[color=black][size=10.5pt]需要注意的是,匹配模式不能够括在花括号里面,匹配模式由括在两个正斜杠之间的正则表达式、一个或多个[/size][/color][color=black][size=10.5pt]awk[/size][/color][color=black][size=10.5pt]操作符组成的表达式组成。[/size][/color]
[color=black][size=10.5pt]Awk[/size][/color][color=black][size=10.5pt]命令可以在命令行输入,也可以写在[/size][/color][color=black][size=10.5pt]awk[/size][/color][color=black][size=10.5pt]脚本文件里。要处理的文件行有来自文件、管道或标准输入。[/size][/color]
[color=black][size=10.5pt][font=Arial]●[/font] [/size][/color][color=black][size=10.5pt]文件的输入[/size][/color]
[/align][align=left][table=98%][tr][td=1,1,707][b][color=black][size=10.5pt]格式[/size][/color][/b][b][color=black][size=10.5pt]1[/size][/color][/b][b][color=black][size=10.5pt]:[/size][/color][/b]
[color=black][size=10.5pt]# awk ‘pattern’ filename[/size][/color]
[color=black][size=10.5pt]# awk ‘{action}’ filename[/size][/color]
[color=black][size=10.5pt]# awk ‘pattern {action}’ filename [/size][/color]
[/td][/tr][tr][td=1,1,707][b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 2-1[/size][/color][/b]
[color=black][size=10.5pt][root@localhost script]# [b]cat passwd[/b][/size][/color]
[color=black][size=10.5pt]root:x:0:0:root:/root:/bin/bash[/size][/color]
[color=black][size=10.5pt]bin:x:1:1:bin:/bin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]daemon:x:2:2:daemon:/sbin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]adm:x:3:4:adm:/var/adm:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]sync:x:5:0:sync:/sbin:/bin/sync[/size][/color]
[color=black][size=10.5pt]shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown[/size][/color]
[color=black][size=10.5pt]… … …[/size][/color]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] '/rpc/' passwd[/b][/size][/color]
[color=black][size=10.5pt]rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]### [/size][/color][color=black][size=10.5pt]解析[/size][/color][color=black][size=10.5pt] ###[/size][/color]
[color=black][size=10.5pt]Awk[/size][/color][color=black][size=10.5pt]打印出所有包含模式[/size][/color][color=black][size=10.5pt] rpc [/size][/color][color=black][size=10.5pt]的行。[/size][/color]
[b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 2-2[/size][/color][/b]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] -F ':' '{print $1}' passwd[/b][/size][/color]
[color=black][size=10.5pt]root[/size][/color]
[color=black][size=10.5pt]bin[/size][/color]
[color=black][size=10.5pt]daemon[/size][/color]
[color=black][size=10.5pt]adm[/size][/color]
[color=black][size=10.5pt]lp[/size][/color]
[color=black][size=10.5pt]sync[/size][/color]
[color=black][size=10.5pt]… … …[/size][/color]
[color=black][size=10.5pt]### [/size][/color][color=black][size=10.5pt]解析[/size][/color][color=black][size=10.5pt] ###[/size][/color]
[color=black][size=10.5pt]Awk[/size][/color][color=black][size=10.5pt]打印出文件[/size][/color][color=black][size=10.5pt]passwd[/size][/color][color=black][size=10.5pt]的第一个字段,其中[/size][/color][color=black][size=10.5pt]“-F”[/size][/color][color=black][size=10.5pt]选项指定分隔符为[/size][/color][color=black][size=10.5pt]“[/size][/color][color=black][size=10.5pt]:[/size][/color][color=black][size=10.5pt]”[/size][/color][color=black][size=10.5pt]。[/size][/color]
[b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 2-3[/size][/color][/b]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] -F ':' '/rpc/{print $1,$2}' passwd[/b][/size][/color]
[color=black][size=10.5pt]rpc[/size][/color][color=black][size=10.5pt] x[/size][/color]
[color=black][size=10.5pt]rpcuser[/size][/color][color=black][size=10.5pt] x[/size][/color]
[color=black][size=10.5pt]### [/size][/color][color=black][size=10.5pt]解析[/size][/color][color=black][size=10.5pt] ###[/size][/color]
[color=black][size=10.5pt]当文件[/size][/color][color=black][size=10.5pt]passwd[/size][/color][color=black][size=10.5pt]匹配模式[/size][/color][color=black][size=10.5pt] rpc [/size][/color][color=black][size=10.5pt]时,[/size][/color][color=black][size=10.5pt]awk[/size][/color][color=black][size=10.5pt]打印该行的头两个字段。其中[/size][/color][color=black][size=10.5pt]“-F”[/size][/color][color=black][size=10.5pt]选项指定分隔符为[/size][/color][color=black][size=10.5pt]“[/size][/color][color=black][size=10.5pt]:[/size][/color][color=black][size=10.5pt]”[/size][/color][color=black][size=10.5pt]。[/size][/color]
[/td][/tr][/table][/align][align=left]
[color=black][size=10.5pt][font=Arial]●[/font] [/size][/color][color=black][size=10.5pt]管道的输入[/size][/color]
[/align][align=left][table=98%][tr][td=1,1,707][b][color=black][size=10.5pt]格式[/size][/color][/b][b][color=black][size=10.5pt]2[/size][/color][/b][b][color=black][size=10.5pt]:[/size][/color][/b]
[color=black][size=10.5pt]# command | awk ‘pattern’[/size][/color]
[color=black][size=10.5pt]# command | awk ‘{action}’[/size][/color]
[color=black][size=10.5pt]# command | awk ‘pattern {action}’ [/size][/color]
[b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 2-4[/size][/color][/b]
[color=black][size=10.5pt][root@localhost script]# [b]cat /etc/passwd | awk -F ':' '$3 < 10'[/b][/size][/color]
[color=black][size=10.5pt]root:x:0:0:root:/root:/bin/bash[/size][/color]
[color=black][size=10.5pt]bin:x:1:1:bin:/bin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]daemon:x:2:2:daemon:/sbin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]adm:x:3:4:adm:/var/adm:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]sync:x:5:0:sync:/sbin:/bin/sync[/size][/color]
[color=black][size=10.5pt]shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown[/size][/color]
[color=black][size=10.5pt]halt:x:7:0:halt:/sbin:/sbin/halt[/size][/color]
[color=black][size=10.5pt]mail:x:8:12:mail:/var/spool/mail:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]news:x:9:13:news:/etc/news:[/size][/color]
[color=black][size=10.5pt]### [/size][/color][color=black][size=10.5pt]解析[/size][/color][color=black][size=10.5pt] ###[/size][/color]
[color=black][size=10.5pt]Cat[/size][/color][color=black][size=10.5pt]命令打印[/size][/color][color=black][size=10.5pt]/etc/passwd[/size][/color][color=black][size=10.5pt]文件的输出通过管道发给[/size][/color][color=black][size=10.5pt]awk[/size][/color][color=black][size=10.5pt]。如果其中的某行的第[/size][/color][color=black][size=10.5pt]3[/size][/color][color=black][size=10.5pt]个字段小于[/size][/color][color=black][size=10.5pt]10[/size][/color][color=black][size=10.5pt]的,则被打印出来。[/size][/color]
[/td][/tr][/table][/align]
页:
[1]