第八节AWK报告生成器(4)

四,awk中的变量

4.1 awk中的内置变量

变量说明
$0记录变量,表示当前正在处理的记录
$n字段变量,其中n为整数且n大于1,表示第n个字段的值
NF整数值,表示当前记录(变量$0所代表的记录)的字段数
NR整数值,表示awk已经读入的记录数,如果有多个文件,这个数目会把处理的多个文件进行统一处理,(显示的是文件的每一行的行号)
FNR与NR不同的是,FNR用于记录处理的行是当前这一文件中被总共处理的行数
FILENAME表示正在处理的数据文件的名称
FS输出字符分隔符,默认值是空格或者制表符,可使用-F制定分隔符
OFS输出字段分隔符,OFS="#"指定输出分隔符为#
RS记录分隔符,默认值是换行符\n
ENVIRON当前shell环境变量及其值的关联数组

示例:

显示所有

head -n 5 /etc/passwd > leefile
awk -F : '{print $0}' leefile 
root: x: 0:0: root:/root:/bin/bash
bin: x: 1:1: bin:/bin:/sbin/nologin
daemon: x: 2:2: daemon:/sbin:/sbin/nologin 
adm: x: 3:4: adm:/var/adm:/sbin/nologin 
lp: x: 4:7: lp:/var/spool/lpd:/sbi n/nologin

显示指定列

awk -F : '{print $1,$ 2}' leefile
root x 
bin x 
daemon x 
adm x 
lp x

显示没行有几列

awk -F : '{print NF}' leefile
7
7
7
7
7

显示行号

awk -F : '{print NR, $1,$ 2}' leefile leefile1
1 root x
2 bin x
3 daemon x
4 adm x
5 lp x
6 test test
7 root root
awk -F : '{print FNR, $1,$ 2}' leefi1e 1eefile
1 root x
2 bin x
3 daemon x
4 adm x
5 lp x
1 test test
2 root root

显示被处理的文件名称

awk -F : '{print FILENAME, $1,$ 2}1 1eefile leefi1 el
leefile root x
leefile bin x 
leefile daemon x 
1eefi1e adm x
leefile lp x
1eefi1el test test
1eefi1el root roo

指定分隔符

awk 'begin{FS = ":"}{print FILENAME, $1,$ 2}' leefile
leefile root x 
1eefi1e bin x 
leefile daemon x
leefi1e adm x 
leefile lp x

指定输出结果分隔符

 awk 'BEGIN{FS = ":"; OFS =, "@"}{print FILENAME, $1, $ 2}' leefile
 1eefile@root@x
1eefi1e@bi n@x
1eefi1e@daemon@x
1eefi1e@adm@x
1eefi1e@1p@x

记录分隔符

echo -e ”a\nb\nc” | awk -F : 'BEGIN{RS = "a"; ORS = "aa"}{print $1}'
aa
b 
c

引用shell中的变量

export a = 1
awk 'BEGIN{print ENVIRON ["a"]}'
1

用户自定义变量

# 使用赋值语句进行赋值
 awk 'BEGIN{test = "lee"; print test}'
# 在命令行中赋值
awk -v test = "lee" 'BEGiN{print test}'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星鬼123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值