awk命令

柔情痞子 提交于 2020-03-14 10:09:29

语法:

awk  [options]   'Pattern{Action}'   file

 

选项:

-F  指定分隔符

-v  设置变量值,

 

变量:

内置变量:

FS  输入字段分隔符, 默认为空白字符

OFS  输出字段分隔符, 默认为空白字符

RS  输入记录分隔符(输入换行符), 指定输入时的换行符

ORS  输出记录分隔符(输出换行符),输出时用指定符号代替换行符

NF  number of Field,当前行有多少列,字段数量

NR  number of ROW,行号,当前处理的文本行的行号。

FNR  当awk处理多个文件时,分别对每个文件的行数进行计数

FILENAME  当前文件名

ARGC  命令行参数的个数

ARGV  表示的是一个数组,这个数组中保存的是命令行所给定的参数,awk规定,'pattern{ action }'并不被看做是参数,awk被看做为参数。

 

举例:

1、AWK 包含两种特殊的模式:BEGIN 和 END。

BEGIN 模式指定了处理文本之前需要执行的操作:

END 模式指定了处理完所有行之后所需要执行的操作:

[root@localhost] ~$ awk 'BEGIN{print "aaa","bbb"} {print $1,$2} END{print "ccc","ddd"}' t
aaa bbb
a b
h i
o p
r s
u v
ccc ddd

2、指定输出分隔符

[root@localhost] ~$ awk -v OFS="+++" '{print $1,$2}' xargs.txt 
a+++b
h+++i
o+++p
r+++s
u+++v

3、使用变量NR NF

[root@localhost] ~$ awk '{print NR,NF}' xargs.txt 
1 7
2 7
3 3

4、使用变量NFR

[root@localhost] ~$ awk '{print FNR,$0}' 1.txt 2.txt 
1 aaa bbb
2 ccc ddd
1 AAA BBB
2 CCC DDD

5、使用变量RS,使用空格作为所谓的行分隔符,也就是说,我们想让awk认为,每遇到一个空格,就换行,换句话说,我们想让awk以为每次遇到一个空格就是新的一行。

[root@localhost] ~$ awk -v RS=" " '{print FNR,$0}' 1.txt 
1 aaa
2 bbb
ccc
3 ddd

 6、使用ARGV

[root@localhost] ~$ awk '{print "aaa",ARGV[0],ARGV[1],ARGV[2]}' 1.txt 2.txt 
aaa awk 1.txt 2.txt
aaa awk 1.txt 2.txt
aaa awk 1.txt 2.txt
aaa awk 1.txt 2.txt

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!