awk学习之理解内置变量

ENVIRON: 使用这个内置变量可以查看当前系统下的环境变量,例如BEGIN  {print ENVIRON["HOME"]}。
FILENAME: 当前正被处理的文件名 例END {print FILENAME}。
NF: 被处理的文件每行(每一行称为一个记录),分成了几个域(列),$0表示整个记录,每个域被标记为$1,$2......$n
NR: 用在block中间段时,标志正被处理的记录序号(行号),用在END区域时,代表输入文件的总记录。
FNR: 当处理多个文件时,NR值会持续增加,逐个文件累计;而每当读入新文件时,FNR值都会被重置为0.
 
FS: 输入记录分隔符,默认为“ ”,即空格。将被处理文件一行记录中的某字段作为分隔符,赋给变量$1,$2......$n。可以用awk -F “ ” 指定,也能用BEGIN{FS=" "}指定。由于分隔字段符必须在读取第一行记录前就定义,所以须在BEGIN区域完成。也能用正则式定义,格式如FS=“[:;%  ]”,:或者;或者%或者空格四者之一的意思。
OFS: 输出记录分隔符,默认情况下,放print字段用空格隔开。如果有指定OFS,则用指定的分隔符$n,被打印在各字段时间取代空格。同理,也必须在处理第一行记录之前就被定义,在BEGIN区域中完成。
RS: 处理记录分隔符。 awk在处理数据时,通常是读取一行,处理后再读取下一行。默认\n换行符作为每次处理的行分隔符。现在定义RS作为新的行分隔符,蒋原来的一行拆成新的几行,也可以配合FS将多行记录合成一行。例FS="\n",这样原来的换行符改成了OFS定义的列分隔符,将RS记录间的内容归结为一行了。
ORS: 输出当前记录分隔符。输出行之间插入ORS作为行与行之间的隔开标志,而且单独作为一行显示,系统默认是换行符“\n”。例ORS="\n............\n",表示新起一行打印出............,然后再次换行输出下一条记录。ORS和OFS不同,前者看成一行行的分隔符,后者看成在当前位置处插入大段的文字描述仅插入一次。
 
关于以上内置变量,总结如下:
处理文件时,遇到FS就作为新的一列;遇到RS就开始新的一行;输出文件被print的变量之间用OFS隔开;每行记录间插入ORS且作为单独一行;遇到NR则告知输出量多少行;遇到NF则告知是处理哪几列;FILENAME是告知正被处理的文档名。
 

猜你喜欢

转载自www.cnblogs.com/xyz999/p/11731518.html