AWK - 内置变量
内置变量
内置变量 | 使用说明 |
---|---|
NF | 获取文件的每行字段数,默认按照空格区分字段。 |
NR | 获取文件行数,空白行对应行号默认不显示。 |
FNR | 读取单个文件,效果同NR。读取多个文件,当读到新文件,FNR方式获取的行号重新从1开始,NR延续上个文件的行号。 |
FS | 输入字段分隔符,默认是空格。 |
OFS | 输出字段分隔符,默认是空格。 |
RS | 输入行分隔符,默认为换行符 |
ORS | 输出行分隔符,默认为换行符 |
例子
1、NF(获取行字段)
1)获取文档每行的字段数
[root@2288H-V6 tmp]# #以nowcoder.txt作为演示文本
[root@2288H-V6 tmp]# cat nowcoder.txt
job salary
c++ 13
java 14
php 12
python 34
[root@2288H-V6 tmp]#
[root@2288H-V6 tmp]# #NF,获取nowcoder.txt每行的字段数,行字段默认空格分隔。
[root@2288H-V6 tmp]# awk '{print NF}' nowcoder.txt
2
2
2
2
2
2)输出文档的第n个字段内容
[root@2288H-V6 tmp]# awk '{print "第一列:",$1,"第二列:",$2,"最后一列:",$NF}' nowcoder.txt | column -t
第一列: job 第二列: salary 最后一列: salary
第一列: c++ 第二列: 13 最后一列: 13
第一列: java 第二列: 14 最后一列: 14
第一列: php 第二列: 12 最后一列: 12
第一列: python 第二列: 34 最后一列: 34
2、NR(行号输出)
1)获取文档行号
[root@2288H-V6 tmp]# #NR,获取文档的行号
[root@2288H-V6 tmp]# awk '{print NR}' nowcoder.txt
1
2
3
4
5
2)文档带行号输出
[root@2288H-V6 tmp]# awk '{print NR " " $0}' nowcoder.txt
1 job salary
2 c++ 13
3 java 14
4 php 12
5 python 34
3、FNR(行号输出)
对比FNR和NR对多个文件的输出。
[root@2288H-V6 tmp]# awk 'BEGIN{OFS="~~~"}{print FNR,NR}' nowcoder.txt file.txt
1~~~1
2~~~2
3~~~3
4~~~4
5~~~5
1~~~6
2~~~7
3~~~8
4~~~9
5~~~10
6~~~11
7~~~12
4、FS(输入字段分隔符)
[root@2288H-V6 tmp]# #FS,输入字段分隔符
[root@2288H-V6 tmp]# awk 'BEGIN{FS="1"}{print "输出第一个字段:" $1}' nowcoder.txt
输出第一个字段:job salary
输出第一个字段:c++
输出第一个字段:java
输出第一个字段:php
输出第一个字段:python 34
[root@2288H-V6 tmp]# #等价于下列写法
[root@2288H-V6 tmp]# awk -F"1" '{print $1}' nowcoder.txt
job salary
c++
java
php
python 34
5、OFS(输出字段分隔符)
[root@2288H-V6 tmp]# awk 'BEGIN{OFS="---"}{print $1,$2}' nowcoder.txt
job---salary
c++---13
java---14
php---12
python---34
6、RS(输入行分隔符)
[root@2288H-V6 tmp]# cat nowcoder.txt
job salary
c++ 13
java 14
php 12
python 34
[root@2288H-V6 tmp]# awk '{RS=" "}{print $0}' nowcoder.txt
job salary
c++
13
java
14
php
12
python
34
[root@2288H-V6 tmp]#
7、ORS(输出行分隔符)
[root@2288H-V6 tmp]# awk '{ORS="---行分隔符---"}{print $0}' nowcoder.txt
job salary---行分隔符---c++ 13---行分隔符---java 14---行分隔符---php 12---行分隔符---python 34---行分隔符---[root@2288H-V6 tmp]#