awk是一种优良的文本处理工具。它不仅是 linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。 awk提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。最简单地说, awk 是一种用于处理文本的编程语言工具。
awk与grep,sed是处理文本数据必不可缺且必须熟练的处理工具。
相关阅读:
grep : 文本过滤器
sed:流编辑器
awk : 报告生成器
二、awk的输出
awk其输出格式有两种:print和printf
print是简单的显示命令,printf 是格式化显示命令
1、print的使用格式
print item1, item2, ...
① 各项目之间使用逗号隔开,而输出时则以空白字符分隔;
② 输出的item可以为字符串或数值、当前记录的字段(如$1)、变量或awk的表达式;数值会先转换为字符串,而后再输出;
③ print命令后面的item可以省略,此时其功能相当于print $0, 因此,如果想输出空白行,则需要使用print "";
2、printf的使用格式
printf format, item1, item2, ...
① 其与print命令的最大不同是,printf需要指定format;
② format用于指定后面的每个item的输出格式;
每一个格式对应一个字段
③ printf不会自动打印换行符;\n
3、format
format格式的指示符都以%开头,后跟一个字符;
① %c: 显示字符的ASCII码;
② %d, %i:十进制整数;
③ %e, %E:科学计数法显示数值;
④ %f: 显示浮点数;
⑤ %g, %G: 以科学计数法的格式或浮点数的格式显示数值;
⑥ %s: 显示字符串;
⑦ %u: 无符号整数;
⑧ %%: 显示%自身;
4、修饰符
① N: 显示宽度;
② -: 左对齐;
③ +:显示数值符号,默认为右对齐;
三、awk的变量
1、awk内置变量之记录变量:
FS : field separator,读取文件本时,所使用字段分隔符;
RS : Record separator,输入文本信息所使用的换行符;
OFS : Output Filed Separator,文件分隔符;
ORS:Output Row Separator,行分隔符;
2、awk内置变量之数据变量:
NR: The number of input records,awk命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中行统一计数;
NF:Number of Field,当前记录的field个数;
FNR: 与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数;
ARGV: 数组,保存命令行本身这个字符串,如awk '{print $0}' a.txt b.txt这个命令中, ARGV[0]保存awk,ARGV[1]保存a.txt;
ARGC: awk命令的参数的个数;
FILENAME: awk命令所处理的文件的名称;
ENVIRON:当前shell环境变量及其值的关联数组;
3、用户自定义变量
gawk允许用户自定义自己的变量以便在程序代码中使用,变量名命名规则与大多数编程语言相同,只能使用字母、数字和下划线,且不能以数字开头。gawk变量名称区分字符大小写。
① 脚本中赋值变量
在gawk中给变量赋值使用赋值语句进行
② 命令行中使用赋值变量
gawk命令也可以在“脚本”外为变量赋值,并在脚本中进行引用。