语法:
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
来源:https://www.cnblogs.com/fanren224/p/8467425.html