转自:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201010308465339/
awk使用格式:
awk -F分隔符 参数 'BEGIN{预处理部分} {真正的处理部分} END{善后处理工作}' 待处理文件。
-F -F后面紧跟着分隔符,如-F:,表示以“:”作为列与列之间的分隔符。
参数 传递给.awk文件的参数。内置变量ARGC是命令行参数的个数,ARGV是命令行参数数组。
其中'BEGIN{预处理部分} {真正处理部分} END{善后处理工作}',可以写在一个.awk文件中。
也使用-f filename.awk来调用.awk文件。
举例:
编写一个awk脚本,名字为file.awk:
BEGIN{ #特别注意,这个“{”只能紧跟着BEGIN,而不能放在下一行。
printf("BEGIN\n");
#在使用命令行时,可以使用-F,指定分隔符。
#在使用.awk文件文件时,可以在BEGIN修改内置变量的值,比如,修改默认的分隔符。
#FS=":",相当于-F:
#完成初始化,设定工作。
}
{
for(i=1;i
{
printf("%s",$i);
}
printf("\n");
}
END{ #特别注意,这个“{”只能紧跟着END,而不能放在下一行。
printf("END\n");
#在这里可以回复shell内置变量的值
#完成变量的恢复工作。
}
待处理文件 将要进行处理的文件。
一、内置变量表 //内置变量是可以直接使用的。 $0就表示一行。
在awk中,记录表示一行,字段表示一列。
属性 | 说明 |
$0 | 当前记录(作为单个变量) //$0表示待处理文件的一行 |
$1~$n |
当前记录的第n个字段(一个字段,表示一列),字段间由FS分隔 //$1~Sn表示待处理文件的第一列,第二列~第n列 |
FS |
输入字段分隔符(即一列和一列的分隔符) 默认是空格 //可以用-F参数重新设定,比如-F:,表示以“:”作为分隔符。也可以在.awk文件的BEGIN部分对FS重新赋值,比如FS=":" |
NF |
当前记录中的字段个数,就是有多少列 //表示待处理文件有多少列 |
NR | 已经读出的记录数,就是行号,从1开始 |
RS | 输入记录他隔符(即一行和一行的分隔符) 默认为换行符 |
OFS | 输出字段分隔符 默认也是空格 |
ORS | 输出记录分隔符 默认为换行符 |
ARGC | 命令行参数个数 //传递给.awk脚本文件的参数个数。 |
ARGV | 命令行参数数组 //传递给.awk脚本文件的参数数组。 |
FILENAME | 当前输入文件的名字 |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
ARGIND | 当前被处理文件的ARGV标志符 |
CONVFMT | 数字转换格式 %.6g |
ENVIRON | UNIX环境变量 |
ERRNO | UNIX系统错误消息 |
FIELDWIDTHS | 输入字段宽度的空白分隔字符串 |
FNR | 当前记录数 |
OFMT | 数字的输出格式 %.6g |
RSTART | 被匹配函数匹配的字符串首 |
RLENGTH | 被匹配函数匹配的字符串长度 |
SUBSEP | \034 |