Awk各部分详解-字段(6)
[align=left][color=black][size=10.5pt]● 使用多个字段分隔符[/size][/color] [/align][align=left][color=black][size=10.5pt] 新版本的[/size][/color][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][color=black][size=10.5pt][ ][/size][/color][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-8[/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,$0}' /etc/passwd > passwd_1[/b][/size][/color]
[color=black][size=10.5pt][root@localhost script]# [b]ls[/b][/size][/color]
[color=black][size=10.5pt]passwd[/size][/color][color=black][size=10.5pt]
passwd_1[/size][/color]
[color=black][size=10.5pt][root@localhost script]# [b]cat passwd_1[/b][/size][/color]
[color=black][size=10.5pt]1 root:x:0:0:root:/root:/bin/bash[/size][/color]
[color=black][size=10.5pt]2 bin:x:1:1:bin:/bin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]3 daemon:x:2:2:daemon:/sbin:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]4 adm:x:3:4:adm:/var/adm:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[/size][/color]
[color=black][size=10.5pt]6 sync:x:5:0:sync:/sbin:/bin/sync[/size][/color]
[color=black][size=10.5pt]7 shutdown:x:6:0:shutdown:/sbin:/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]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]作为输入字段分隔符,打印[/size][/color][color=black][size=10.5pt]/etc/passwd[/size][/color][color=black][size=10.5pt]文件的每条记录的记录号和对应的记录,并重定向到[/size][/color][color=black][size=10.5pt]/root/script/passwd_1[/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-9[/size][/color][/b]
[color=black][size=10.5pt][root@localhost script]#[b] awk -F '[ :\t]' '{print $1,$2,$3}' passwd_1[/b][/size][/color]
[color=black][size=10.5pt]1 root x[/size][/color]
[color=black][size=10.5pt]2 bin x[/size][/color]
[color=black][size=10.5pt]3 daemon x[/size][/color]
[color=black][size=10.5pt]4 adm x[/size][/color]
[color=black][size=10.5pt]5 lp x[/size][/color]
[color=black][size=10.5pt]6 sync x[/size][/color]
[color=black][size=10.5pt]7 shutdown 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]-F[/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]shell[/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]默认的输出字段分隔符是单个空格,被保存在[/size][/color][color=black][size=10.5pt]awk[/size][/color][color=black][size=10.5pt]内置变量[/size][/color][b][color=black][size=10.5pt]OFS[/size][/color][/b][color=black][size=10.5pt]中。之前使用的[/size][/color][color=black][size=10.5pt]print[/size][/color][color=black][size=10.5pt]函数把数据输出到屏幕时,[/size][/color][color=black][size=10.5pt]print[/size][/color][color=black][size=10.5pt]用于分隔字段的逗号,在输出时转换成[/size][/color][b][color=black][size=10.5pt]OFS[/size][/color][/b][color=black][size=10.5pt]的值。如果使用[/size][/color][b][color=black][size=10.5pt]OFS[/size][/color][/b][color=black][size=10.5pt]的默认值时,则像[/size][/color]
[b][color=black][size=10.5pt]范例[/size][/color][/b][b][color=black][size=10.5pt] 3-9 [/size][/color][/b][color=black][size=10.5pt]把[/size][/color][color=black][size=10.5pt]$1,$2,$3[/size][/color][color=black][size=10.5pt]之间都用单个空格来分隔。如果使用[/size][/color][color=black][size=10.5pt]print[/size][/color][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-10[/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]OFS[/size][/color][/b][color=black][size=10.5pt]的值,改变输出字段分隔符[/size][/color]
[color=black][size=10.5pt][root@localhost script]# [b]awk[/b][b] -F ':' 'BEGIN {OFS="\t*\t"}{print $1,$2,$7}' passwd[/b][/size][/color]
[color=black][size=10.5pt]root
*
x
*
/bin/bash[/size][/color]
[color=black][size=10.5pt]bin
*
x
*
/sbin/nologin[/size][/color]
[color=black][size=10.5pt]daemon
*
x
*
/sbin/nologin[/size][/color]
[color=black][size=10.5pt]adm[/size][/color][color=black][size=10.5pt]
*
x
*
/sbin/nologin[/size][/color]
[color=black][size=10.5pt]lp[/size][/color][color=black][size=10.5pt]
*
x
*
/sbin/nologin[/size][/color]
[color=black][size=10.5pt]sync
*
x
*
/bin/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]在[/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]OFS[/size][/color][/b][color=black][size=10.5pt]的值为两个制表符中间夹着个星号[/size][/color][color=black][size=10.5pt]“\t*\t”[/size][/color][color=black][size=10.5pt],所以输出的字段之间就以两个制表符中间夹着一个星号作为分隔符。[/size][/color]
[/td][/tr][/table][/align]
页:
[1]