
com.sghd.logging.query.AwkQuery Maven / Gradle / Ivy
The newest version!
package com.sghd.logging.query;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.sghd.logging.csv.CsvUtils;
/***
* awk 查询命令生成
* @author solq
*/
public class AwkQuery {
private static final String DOUBLE_QUOTATION = "\\\"";
private static final String AWK_COMMAND_START = "gawk ";
private static final String AWK_COMMAND_END = " {print} \" ";
private static final String AWK_COMMAND_SPLIT_START = " \" BEGIN {FS= " + DOUBLE_QUOTATION + "\\\\t"
+ DOUBLE_QUOTATION + ";";
private static final String AWK_COMMAND_SPLIT_END = " } ";
private static final String AWK_COMMAND_JOIN_OR = " || ";
private static final String AWK_COMMAND_JOIN_AND = " && ";
// ////////////awk///////////////
private Class> clazz;
private List indexs = new LinkedList<>();
public AwkQuery(Class> clazz) {
this.clazz = clazz;
}
public AwkQuery(Class> clazz, AwkParam... params) {
this(clazz);
this.addParam(params);
}
public AwkQuery addParam(String name, AwkOperateType operate, Object value) {
AwkParam param = AwkParam.valueOf(name, operate, value);
return addParam(param);
}
public AwkQuery addParam(AwkParam... params) {
Map index = CsvUtils.getFieldIndexs(clazz);
for (AwkParam param : params) {
Integer key = index.get(param.getName());
if (key != null) {
param.setIndex(key + 1);
this.indexs.add(param);
}
}
return this;
}
// gawk "BEGIN {FS=\"\\t\"} $9 == \"900\" {print}"
// E:\\java3\\game_long3\\logs\\logs\\2014-09-06\\test2
public String buildCsvCommand(String filePath) {
final int len = this.indexs.size();
final StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(AWK_COMMAND_START);
stringBuffer.append(AWK_COMMAND_SPLIT_START);
// 生成awk var 代码
for (int i = 0; i < len; i++) {
AwkParam obj = this.indexs.get(i);
String awkVar = obj.getAwkVar();
if (obj.getAwkVar() == null) {
continue;
}
stringBuffer.append(awkVar);
}
stringBuffer.append(AWK_COMMAND_SPLIT_END);
// 生成逻辑对比代码
for (int i = 0; i < len; i++) {
AwkParam obj = this.indexs.get(i);
stringBuffer.append(obj.toString());
if (i == len - 1) {
continue;
}
if (obj.isHasAnd()) {
stringBuffer.append(AWK_COMMAND_JOIN_AND);
} else {
stringBuffer.append(AWK_COMMAND_JOIN_OR);
}
}
stringBuffer.append(AWK_COMMAND_END);
if (StringUtils.isNotEmpty(filePath)) {
stringBuffer.append(filePath);
}
return stringBuffer.toString();
}
// get
public List getIndexs() {
return indexs;
}
public Class> getClazz() {
return clazz;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy