四,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}'