发新话题
打印

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

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

● 使用多个字段分隔符

    新版本的Awk提供指定多个输入字段分隔符。如果有多个字符被用于字段分隔符FS,则FS对应是一个正则表达式字符串,并且被括在方括号中([ ])。

范例 3-8
首先先创建实验数据
[root@localhost script]# awk -F ':' '{print NR,$0}' /etc/passwd > passwd_1
[root@localhost script]# ls
passwd
passwd_1

[root@localhost script]# cat passwd_1
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
… … …
### 解析 ###
通过awk命令以作为输入字段分隔符,打印/etc/passwd文件的每条记录的记录号和对应的记录,并重定向到/root/script/passwd_1文件中。
范例 3-9
[root@localhost script]# awk -F '[ :\t]' '{print $1,$2,$3}' passwd_1
1 root x
2 bin x
3 daemon x
4 adm x
5 lp x
6 sync x
7 shutdown x
… … …
### 解析 ###
-F选项后跟了一个位于方括号中的正则表达式。当遇到空格、冒号或制表符时,awk会把它当成字段分隔符。正则表达式要在两个引号里面,这样才不会给shell当成自己的元字符而给解析了。


         输出字段分隔符

默认的输出字段分隔符是单个空格,被保存在awk内置变量OFS中。之前使用的print函数把数据输出到屏幕时,print用于分隔字段的逗号,在输出时转换成OFS的值。如果使用OFS的默认值时,则像
范例 3-9 $1,$2,$3之间都用单个空格来分隔。如果使用print函数输出时,不在两个字段间加入逗号,则输出的字段会连在一起。

范例 3-10
BEGIN语句中指定OFS的值,改变输出字段分隔符
[root@localhost script]# awk -F ':' 'BEGIN {OFS="\t*\t"}{print $1,$2,$7}' passwd
root
*
x
*
/bin/bash

bin
*
x
*
/sbin/nologin

daemon
*
x
*
/sbin/nologin

adm
*
x
*
/sbin/nologin

lp
*
x
*
/sbin/nologin

sync
*
x
*
/bin/sync

… … …
### 解析 ###
BEGIN语句中指定OFS的值为两个制表符中间夹着个星号“\t*\t”,所以输出的字段之间就以两个制表符中间夹着一个星号作为分隔符。



№→  Learning 《Perl Programming》

TOP

发新话题
版块跳转 
Powered by Discuz! 6.1.0 © 2001-2007 Comsenz Inc.
---------------------------------------------------------------------------------------
本论坛所有文章为会员所发布,会员拥有该内容的所有权力及责任,转载时请注明出处!
站务管理员:我心飞翔 QQ:12012805(请直奔主题) 有害信息举报电话 15914350818
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触和有损学校声誉不属实的言论!
粤ICP备06054096号 茂名市公安局网警支队备案: 4409813060501

Processed in 0.049402 second(s), 9 queries, Gzip enabled.