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