Linux awk 内置变量实例(2)

awk '/^root/ {print $0}' /etc/passwd

结果: root:x:0:0:root:/root:/bin/bash # /^root/ 为正则过滤表达式,$0代表是逐行

2) FS 分隔符

awk 'BEGIN{FS=":"} /^root/ {print $1,$NF}' /etc/passwd

结果: root /bin/bash

注: FS为字段分隔符,默认是空格。因为passwd里是”:”分隔,所以需要修改默认分隔符。NF是字段总数,$0代表当前行记录,$1-$n是当前行各个字段对应值,$NF代表最后一列。

3) 记录条数(NR,FNR)

awk 'BEGIN{FS=":"}{print NR, $1, $NF, "\t", $0}' /etc/passwd

结果:

1 root /bin/bash root:x:0:0:root:/root:/bin/bash
2 daemon /bin/sh daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin /bin/sh bin:x:2:2:bin:/bin:/bin/sh
4 sys /bin/sh sys:x:3:3:sys:/dev:/bin/sh
5 sync /bin/sync sync:x:4:65534:sync:/bin:/bin/sync

........

awk 'BEGIN{FS=":"}/^s/{print NR, $1, $NF, "\t", $0}' /etc/passwd # 过滤以首字符”s“开头的所有行

结果:

4 sys /bin/sh sys:x:3:3:sys:/dev:/bin/sh
5 sync /bin/sync sync:x:4:65534:sync:/bin:/bin/sync
20 syslog /bin/false syslog:x:101:103::/home/syslog:/bin/false

........

注: NR得到当前记录所在行

4) 字段分隔符(OFS)

awk 'BEGIN{FS=":"; OFS="##"} /^root/ {print FNR, $1, $NF}' /etc/passwd

结果: 1##root##/bin/bash

注: OFS设置默认字段分隔符, FNR当前记录行

5) 行记录分隔符(ORS)

awk 'BEGIN{FS=":"; ORS="##"}{print FNR, $1, $NF}' /etc/passwd

结果: 1 root /bin/bash##2 daemon /bin/sh##3 bin /bin/sh##4 sys /bin/sh##5 sync /bin/sync##......

awk 'BEGIN{FS=":"; ORS="\n"}{print FNR, $1, $NF}' /etc/passwd # "/n" 是linux 中换行符

结果:

1 root /bin/bash
2 daemon /bin/sh
3 bin /bin/sh
4 sys /bin/sh
5 sync /bin/sync

.......

注: ORS默认是换行符,这里修改为:”##”,所有行之间用”##”分隔了

6) 参数获取(ARGC ,ARGV)

awk 'BEGIN{FS=":"; print "ARGC="ARGC; for(k in ARGV) {print k"="ARGV[k];}}' /etc/passwd

结果:

ARGC=2
0=awk
1=/etc/passwd

注: ARGC得到所有输入参数个数,ARGV获得输入参数内容是一个数组

7) 获得传入的文件名(FILENAME)

awk 'BEGIN{FS=":";}/^r/ {print FILENAME, "\t", $0}' /etc/passwd

结果:

/etc/passwd root:x:0:0:root:/root:/bin/bash
/etc/passwd rtkit:x:110:117:RealtimeKit,,,:/proc:/bin/false

注: FILENAME, $0-$N,NF 不能使用在BEGIN中,BEGIN中不能获得任何与文件记录操作的变量

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/040c858386c91b272c52283fcf237bd5.html