awk使用实例
2008-10-08 11:41
246 查看
简介awk是一种编程语言,非常适合处理文本,使用简单,功能却很强大。awk扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行
OFS 输出的分隔符
FNR 输入文件的记录数
NF 当前行的字段数
NR 当前处理的行数
IBM dw: Awk 实例 1 2 3
Oracle OTN: AWK:Linux 管理员的智能工具包
示例
基本使用
输出文件的第一列awk '{print $1}' access_log使用自定义的分隔符(默认是空格)
awk -F ', ' '{print $1}' access_log awk -F '&q=' '{print $2}' access_log条件判断
awk '$9==304 {print}' access_log awk '$6 > 0 {print $10}' access_log正则匹配
awk '$7~/^//ppp/ {print $7}' access_log awk '$7!~/^//manage/ {print $7}' access_log显示多个字段
awk '{print $1, $6}' access_log改变输出格式
awk '{print "req:/t" $7 "/t" $9}' access_log使用printf格式化输出
awk '{printf("req:/t%s/t%.2f/n", $6, $9)}' access_log
使用外部文件
当脚本比较复杂时,可以将脚本放到外部文件,通过-f选项指定awk -f slowreq.awk access.log外部文件内容:
$6 > 0 { split($10,a,"?"); req=a[1]; print req; }
BEGIN和END块
awk 在开始处理输入文件之前会执行 BEGIN 块,因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它在程序中以后会引用的全局变量的极佳位置。同时awk在处理了输入文件中的所有行之后会执行END块。通常,END 块用于执行最终计算或打印应该出现在输出流结尾的摘要信息对某一列求和awk 'BEGIN{sum=0} {sum=$9+sum} END {print "sum " sum}' data
内部变量
常用的包括FS 输入的分隔符,也就是-F指定的awk 'BEGIN {FS="-"}{print $3}' access_log
OFS 输出的分隔符
awk 'BEGIN {OFS="-"}{print $1, $6}' access_log
FNR 输入文件的记录数
// 求平均数 awk 'BEGIN{sum=0} {sum=$9+sum} END {print "average " sum / FNR}' access_log
NF 当前行的字段数
// 从第6个字段开始输出 awk '{for(i=6; i<NF; ++i){printf "%s,",$i};printf "%s/n", $NF}' access_log
NR 当前处理的行数
// 从第6行开始输出,到100行为止,并打印出行数 awk '{if(NR >= 6 && NR <=100) printf "%d: %s/n", NR, $7}' access_log
组合使用
awk通常都与sort等命令组合使用// 输出第七个字段的前10名 awk '{print $7}' access_log|sort |uniq -c |sort -n -r |head -10
参考资料
man awkIBM dw: Awk 实例 1 2 3
Oracle OTN: AWK:Linux 管理员的智能工具包
相关文章推荐
- awk的使用 第六部分 awk编程的几个实例
- awk使用实例说明
- awk使用的实例
- awk使用 第7部分 awk对多行数据的处理实例
- awk使用实例详解
- Linux日志查看(8)— awk 命令(使用实例)
- Linux中sed和awk的使用及其相关实例解析
- shell awk 使用实例 awk 合并行
- 几个awk的使用实例
- Linux中sed和awk的使用及其相关实例解析
- shell 中awk的实例使用
- awk使用实例一则
- AWK使用实例
- AWK使用实例
- awk的使用实例
- AWK简介及使用实例
- Linux中sed和awk的使用及其相关实例解析
- ActiveMQ 入门使用实例
- Jquery使用(4) :BOM和操作DOM,综合实例
- Python Sleep休眠函数使用简单实例