FILENAME 当前文件名
FS 字段分割符(默认为一个空格)
NF 当前记中的字段个数。
OFMT 数字的输出格式(默认为%6):负责print语句的格式转换和将数字转换为字符串。
OFS 输出字段分隔符(默认为一个空格)
ORS 输出记录分隔符(默认为一个换行符)
RS 记录分割符(默认为一个换行符)
gawk的增加的变量
ARGING 当前输入文件的的ARGV的引索。
ERRNO 当前getline或close()失败时的描述信息。
FIELDWIDTHS 用空格分隔的数据列表,用于描述输入字段的宽度。
IGNORECASE 如果不为0,模式匹配和字符串比较是不分大小写的
RT 和RS匹配的输入文本的值(默认什么也没有)
可以使用RS和ORS实现s/old/new/g 的替换形式。但存在在打印的最后有ORS的值。
$awk -f simplesed.awk RS="old|OLD" ORS="brand new" simplesed.data
即可实现把simplesed.data 的“old|Old”替换为“brand new”
$cat simplesed.awk
{
if (RT == " ")
print $0
else
print $0
}
$cat simplesed.data
The OLD house" old old OLD is a great show.
I like shopping for old things at garage sales.
liuuliuliuliu great company! old
I like
其结果会在末尾多出一个brand new ,经过测试发现,RT在本测试中打印出来是当前的RS每次所匹配的值,若是不在awk的主循环体中,则RT打印无结果。
但我发现在最后的一次匹配上,若是有{print RT,RT,RT,$0},则不会出现重复的RT值,并且在结果中显示的是先ORS后RT
其原因是RT打印的是下一次的值,并且只有第一次是在最前面,其他时候在RS值的后面;{print $0,RT,RT,RT}则会在输出时把RT的放在RS匹配值的前面。