awk命令

语法:

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

 

posted @ 2018-02-24 19:21  fanren224  阅读(96)  评论(0编辑  收藏  举报