package logloader.awk;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import logloader.SelectContext;
/**
* 日志筛选方式
* @author JY253
*
*/
public enum SelectType {
Index("$",OperatorType.Expression,1,10,true){
/**
* arg1 列号
* arg2 值
*/
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
if(args.length != 2){
throw new IllegalArgumentException("Index的参数个数为:2");
}
if(Integer.valueOf(args[0]+"") == -1) {//不确定第几列就使用搜索
return GREPALL.preCommandStr(selectContext, new Object[]{args[1]});
}
StringBuffer sb = new StringBuffer(this.operator);
return sb.append(args[0]).append(" == \"").append(args[1]).append("\" ").toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
// TODO Auto-generated method stub
return null;
}
},
/**
* arg1 包含的字段
*/
GREPALL("",OperatorType.Expression,2,10){
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
if(args.length != 1){
throw new IllegalArgumentException("GREP的参数个数应为:1");
}
StringBuffer sb = new StringBuffer(this.operator);
return sb.append("$0~").append("/").append(args[0]).append("/").toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
// TODO Auto-generated method stub
return null;
}
},
/**
* arg1 包含的字段Index
* arg2 包含的字段值
*/
GREP("",OperatorType.Expression,2,9){
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
if(args.length != 2){
throw new IllegalArgumentException("GREP的参数个数应为:2");
}
StringBuffer sb = new StringBuffer(this.operator);
return sb.append("$").append(args[0]).append("~").append("/").append(args[1]).append("/").toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
// TODO Auto-generated method stub
return null;
}
},
/**
* arg1 开始查找的行数
* arg2 结果数量的限制 size
*/
LIMIT("",OperatorType.Statement,4,10){
//awk '/abc/{print;a++}a>3{exit}' *.txt
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
if(args.length != 1){
throw new IllegalArgumentException("GREP的参数个数应为:1");
}
StringBuffer sb = new StringBuffer(this.operator);
return sb.append("n++;if(n>").append(args[0]).append(") exit;").toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
return " END {print NR}";//输出当前扫描到第几行
}
},
/**
* arg1 开始查找的页数
* arg2 结果数量的限制 size
*/
LIMITAll("",OperatorType.Statement,4,10){
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
if(args.length != 2){
throw new IllegalArgumentException("LIMITAll的参数个数应为:2");
}
StringBuffer sb = new StringBuffer(this.operator);
int minResult = ((Integer)args[0] - 1) * (Integer)args[1];
return sb.append("n++;if(n>").append(minResult).append(") ").toString();
}
public SelectType getBodyWay() {
return SelectType.Column;
}
public SelectType getExcludeOtherWay() {
return SelectType.Column;
}
public String afterCommandStr(SelectContext selectContext,Object[] args){
StringBuffer sb = new StringBuffer();
int maxResult = (Integer)args[0] * (Integer)args[1];
return sb.append(";if(n>").append(maxResult).append(") exit; ").toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
return " END {print NR} ";//输出当前扫描到第几行
}
},
/**
* 从第几行开始搜索
* arg1 其实行数
*/
FROMNR("",OperatorType.Expression,1,1){
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
if(args.length != 1){
throw new IllegalArgumentException("FROMNR的参数个数应为:1");
}
StringBuffer sb = new StringBuffer(this.operator);
return sb.append("NR >= ").append(args[0]).append(" ").toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
// TODO Auto-generated method stub
return null;
}
},
Expr("",OperatorType.Expression,1,2,true){
@Override
public String preCommandStr(SelectContext selectContext, Object[] args) {
if(args.length < 1){
throw new IllegalArgumentException("FROMNR的参数个数应大于:1");
}
StringBuffer sb = new StringBuffer(this.operator);
return sb.append(args[0]).append(" ").toString();
}
@Override
public String tailCommandStr(SelectContext selectContext, Object[] args) {
// TODO Auto-generated method stub
return null;
}
},
/**
* 列筛选
* args... 列的序号
*/
Column("",OperatorType.Statement,100,10){
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
// if(args.length < 1){
// throw new IllegalArgumentException("FROMNR的参数个数大于:1");
// }
StringBuffer sb = new StringBuffer(this.operator);
if(args == null || args.length == 0){
sb.append("print $0");
} else {
sb.append("print ");
for(int i = 0;i < args.length;i++){
sb.append("$").append(args[i]).append(" ");
}
}
return sb.toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
// TODO Auto-generated method stub
return null;
}
},
/**
* 自定义
*/
Custom("",OperatorType.NONE,1000,10){
@Override
public String preCommandStr(SelectContext selectContext,Object[] args) {
if(args.length == 0){
throw new IllegalArgumentException("Custom的参数个数应大于等于:1");
}
StringBuffer sb = new StringBuffer(this.operator);
sb.append(args[0]);
return sb.toString();
}
@Override
public String tailCommandStr(SelectContext selectContext,Object[] args) {
// TODO Auto-generated method stub
return null;
}
},
/**
* 求和
* arg1 属性名
* arg2 查询别名 alis
*/
Sum("",OperatorType.Aggregate,100,9){
@Override
public String preCommandStr(SelectContext selectContext, Object[] args) {
if(args.length != 2){
throw new IllegalArgumentException("Sum的参数个数应等于:2");
}
StringBuffer sb = new StringBuffer();
List<SelectParam> groupByFields = selectContext.getArgs(GroupBy);
if(groupByFields != null && groupByFields.size() > 0){
sb.append(" g").append(selectContext.getCurrentParam().getIndex());
sb.append("[");
for(int i = 0;i < groupByFields.size();i++){
sb.append(groupByFields.get(i).getArgs()[0]);
if(i < groupByFields.size() - 1){
sb.append(",");
}
}
sb.append("]+=");
sb.append(args[0]);
} else {
sb.append(" g").append(selectContext.getCurrentParam().getIndex()).append("+=").append(args[0]).append(" ");
}
return sb.toString();
}
@Override
public String tailCommandStr(SelectContext selectContext, Object[] args) {
StringBuffer sb = new StringBuffer();
List<SelectParam> groupByFields = selectContext.getArgs(GroupBy);
if(groupByFields == null || groupByFields.size() == 0){
sb.append("END{ print g").append(selectContext.getCurrentParam().getIndex()).append(";}");
}
return sb.toString();
}
},
/**
* 求平均
* arg1 属性名
* arg2 查询别名 alis
*/
Avg("",OperatorType.Aggregate,100,8){
java版本awk日志分析
2星 需积分: 50 149 浏览量
2014-06-04
20:24:22
上传
评论 1
收藏 46KB RAR 举报
jake_gogo
- 粉丝: 0
- 资源: 3