Awk工作原理-数据处理过程(3)
[color=black]大家应该对[/color][color=black][size=10.5pt]/etc/passwd[/size][/color][color=black]密码文件都比较熟悉了,它的格式如下:[/color] [color=black][size=10.5pt]root:[/size][/color][color=black][size=10.5pt]x:0:0:root:/root:/bin/bash[/size][/color][color=black][size=10.5pt]bin:[/size][/color][color=black][size=10.5pt]x:1:1:bin:/bin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]daemon:[/size][/color][color=black][size=10.5pt]x:2:2:daemon:/sbin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]adm:[/size][/color][color=black][size=10.5pt]x:3:4:adm:/var/adm:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]lp:[/size][/color][color=black][size=10.5pt]x:4:7:lp:/var/spool/lpd:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]sync:[/size][/color][color=black][size=10.5pt]x:5:0:sync:/sbin:/bin/sync[/size][/color]
[color=black][size=10.5pt]shutdown:[/size][/color][color=black][size=10.5pt]x:6:0:shutdown:/sbin:/sbin/shutdown[/size][/color]
[color=black][size=10.5pt]… … …[/size][/color]
[color=black]使用[/color][color=black][size=10.5pt]awk[/size][/color][color=black]命令如下:[/color]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] -F ':' '{print $1,$3}' /etc/passwd[/b][/size][/color]
[color=black][size=10.5pt][font=Arial]●[/font] [/size][/color][color=black][size=10.5pt]Awk[/size][/color][color=black]使用[/color][color=black][size=10.5pt]/etc/passwd[/size][/color][color=black]文件中一行做为输入,并将这一行赋给内部变量[/color][b][color=black][size=10.5pt]$0[/size][/color][/b][color=black],以换行符结束。[/color]
[color=black][size=10.5pt][font=Arial]●[/font] [/size][/color][color=black]然后,行被指定的[/color][color=black][size=10.5pt]“[/size][/color][color=black]:[/color][color=black][size=10.5pt]”[/size][/color][color=black]分隔符分解成字段,每一个字段存储在以编号的变量中,从[/color][b][color=black][size=10.5pt]$1[/size][/color][/b][color=black]开始,可以多达[/color][color=black][size=10.5pt]100[/size][/color][color=black]个字段。[/color]
[color=black][size=10.5pt]Awk[/size][/color][color=black]的分隔字段的分隔符是用一个内部变量[/color][b][color=black][size=10.5pt]FS[/size][/color][/b]
[color=black]来保存的。初始时,[/color][b][color=black][size=10.5pt]FS[/size][/color][/b][color=black]被赋值为空格(包括制表符和空格符)。如果要改变默认的分隔符就用[/color][color=black][size=10.5pt]“[b]-F[/b]”[/size][/color][color=black]选项加上要使用的分隔符。[/color]
[color=black][size=10.5pt][font=Arial]●[/font] [/size][/color][color=black][size=10.5pt]Awk[/size][/color][color=black]打印字段时,使用[/color][color=black][size=10.5pt]print[/size][/color][color=black]函数来进行。[/color]
[b][color=black][size=10.5pt]{print $1,$3}[/size][/color][/b]
[color=black]输出显示每个字段是使用空格进行分隔,如下:[/color]
[color=black][size=10.5pt]root[/size][/color][color=black][size=10.5pt] 0[/size][/color]
[color=black][size=10.5pt]bin[/size][/color][color=black][size=10.5pt] 1[/size][/color]
[color=black][size=10.5pt]daemon[/size][/color][color=black][size=10.5pt] 2[/size][/color]
[color=black][size=10.5pt]adm[/size][/color][color=black][size=10.5pt] 3[/size][/color]
[color=black][size=10.5pt]… … …[/size][/color]
[color=black][size=10.5pt]Awk[/size][/color][color=black]在[/color][color=black][size=10.5pt]root[/size][/color][color=black]和[/color][color=black][size=10.5pt]0[/size][/color][color=black]之间加入了空格,因为在[/color][color=black][size=10.5pt]$1[/size][/color][color=black]和[/color][color=black][size=10.5pt]$3[/size][/color][color=black]之间有个逗号。逗号映射着另一个内部变量,叫做输出字段分隔符[b]([/b][/color][b][color=black][size=10.5pt]output field separator, OFS[/size][/color][/b][b][color=black]),[/color][/b][b][color=black][size=10.5pt]OFS[/size][/color][/b][color=black]默认是空格。逗号给[/color][b][color=black][size=10.5pt]OFS[/size][/color][/b][color=black]变量中存储的字符替换。[/color]
[font=Arial]●[/font] [size=10.5pt]Awk[/size]输出之后,将从文件中获取下一行,并将其存储到[size=10.5pt]$0[/size]中,覆盖原来的内容。然后将新的字符串分隔成字段并进行处理。就这样直到文件所有的行都进行完后结束。
[[i] 本帖最后由 lvdbing 于 2008-4-22 02:19 编辑 [/i]]
页:
[1]