All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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