广东技术师范学院后院社区's Archiver

lvdbing 发表于 2008-4-22 02:21

Awk各部分详解-字段(5)

[align=left]每条记录都是由字段组成的,默认情况下,字段间是用空白符(空格或制表符)分隔。如[b][color=black][size=10.5pt]2.2[/size][/color][/b][color=black][size=10.5pt]节提到,处理数据的每条记录分隔成一条条字段,并保存在变量[/size][/color][b][color=black][size=10.5pt]$1~$100[/size][/color][/b][color=black][size=10.5pt],而字段数保存在内置变量[/size][/color][b][color=black][size=10.5pt]NF[/size][/color][/b][color=black][size=10.5pt]中,并且随着记录的改变字段数也随之不同[/size][/color] [/align][align=left][table][tr][td=1,1,707][b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 3-4[/size][/color][/b]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] -F ':' '{print NR, $1,$3,$7}' passwd[/b][/size][/color]
[color=black][size=10.5pt]1 root 0 /bin/bash[/size][/color]
[color=black][size=10.5pt]2 bin 1 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]3 daemon 2 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]4 adm 3 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]5 lp 4 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]6 sync 5 /bin/sync[/size][/color]
[color=black][size=10.5pt]7 shutdown 6 /sbin/shutdown[/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][color=black][size=10.5pt]passwd[/size][/color][color=black][size=10.5pt]每一行记录号([/size][/color][b][color=black][size=10.5pt]NR[/size][/color][/b][color=black][size=10.5pt])和第[/size][/color][color=black][size=10.5pt]1[/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]7[/size][/color][color=black][size=10.5pt]字段。[/size][/color]
[b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 3-5[/size][/color][/b]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] -F ':' '{print $0,NF}' passwd[/b][/size][/color]
[color=black][size=10.5pt]root:x:0:0:root:/root:/bin/bash 7[/size][/color]
[color=black][size=10.5pt]bin:x:1:1:bin:/bin:/sbin/nologin 7[/size][/color]
[color=black][size=10.5pt]daemon:x:2:2:daemon:/sbin:/sbin/nologin 7[/size][/color]
[color=black][size=10.5pt]adm:x:3:4:adm:/var/adm:/sbin/nologin 7[/size][/color]
[color=black][size=10.5pt]lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7[/size][/color]
[color=black][size=10.5pt]sync:x:5:0:sync:/sbin:/bin/sync 7[/size][/color]
[color=black][size=10.5pt]shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 7[/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][color=black][size=10.5pt]passwd[/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][color=black][size=10.5pt]    Awk[/size][/color][color=black][size=10.5pt]内置变量[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][color=black][size=10.5pt]保存了输入字段分隔符的值。默认情况下输入字段分隔符[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][color=black][size=10.5pt]的值为空白符(空格或制表符),并且删除各字段前多余的空格或制表符。有两种方法可以改变输入字段分隔符的值,第一种是:在[/size][/color][b][color=black][size=10.5pt]BEGIN[/size][/color][/b][color=black][size=10.5pt]语句中指定[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][color=black][size=10.5pt]的值;第二种是:在命令行中加入[/size][/color][color=black][size=10.5pt]“-F”[/size][/color][color=black][size=10.5pt]选项来指定[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][color=black][size=10.5pt]的值。[/size][/color][/align][align=left][table][tr][td=1,1,707][b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 3-6[/size][/color][/b]
[color=black][size=10.5pt]方法一:在[/size][/color][b][color=black][size=10.5pt]BEGIN[/size][/color][/b][color=black][size=10.5pt]语句中指定[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][color=black][size=10.5pt]的值[/size][/color]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] 'BEGIN {FS=":"}{print NR,$1,$3,$7}' passwd[/b][/size][/color]
[color=black][size=10.5pt]1 root 0 /bin/bash[/size][/color]
[color=black][size=10.5pt]2 bin 1 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]3 daemon 2 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]4 adm 3 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]5 lp 4 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]6 sync 5 /bin/sync[/size][/color]
[color=black][size=10.5pt]7 shutdown 6 /sbin/shutdown[/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]BEGIN[/size][/color][/b][color=black][size=10.5pt]语句中指定[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][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][color=black][size=10.5pt]([b]NR[/b])[/size][/color][color=black][size=10.5pt]和第[/size][/color][color=black][size=10.5pt]1[/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]7[/size][/color][color=black][size=10.5pt]字段。[/size][/color]
[b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 3-7[/size][/color][/b]
[color=black][size=10.5pt]方法二:在命令行中加入[/size][/color][color=black][size=10.5pt]“-F”[/size][/color][color=black][size=10.5pt]选项来指定[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][color=black][size=10.5pt]的值[/size][/color]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] -F ':' '{print NR,$1,$3,$7}' passwd[/b][/size][/color]
[color=black][size=10.5pt]1 root 0 /bin/bash[/size][/color]
[color=black][size=10.5pt]2 bin 1 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]3 daemon 2 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]4 adm 3 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]5 lp 4 /sbin/nologin[/size][/color]
[color=black][size=10.5pt]6 sync 5 /bin/sync[/size][/color]
[color=black][size=10.5pt]7 shutdown 6 /sbin/shutdown[/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][color=black][size=10.5pt]“-F”[/size][/color][color=black][size=10.5pt]选项来指定[/size][/color][b][color=black][size=10.5pt]FS[/size][/color][/b][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][color=black][size=10.5pt]([b]NR[/b])[/size][/color][color=black][size=10.5pt]和第[/size][/color][color=black][size=10.5pt]1[/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]7[/size][/color][color=black][size=10.5pt]字段。[/size][/color]
[/td][/tr][/table][/align]

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.