我有一个像bellow一样的日志文件:
5082 //open_api/user/get_user_info
5074 /user/get_user_idCard_info?passportId=YRD1412538757&viewSource=02
5029 /user/getuserinfo?passportId=YRD1412538757
4706 /user/getuserinfo?passportId=YRD1507000030516
4611 /user/get_user_idCard_info?passportId=YRD1507000030516&viewSource=02
4040 /salesloan/update_draw_bank
输出应该是:
5082 //open_api/user/get_user_info
9685 /user/get_user_idCard_info
9735 /user/getuserinfo
4040 /salesloan/update_draw_bank
每行前面的数字是此网址被调用的数字。现在我想要计算每个url(没有获取http请求的params)被请求的次数,例如,如上所述我只想计算' /repay/query_need_repay_data.action'网址被称为。现在我使用java来过滤和处理这些行,但对于一个200M字节的文件,它已经花了4个小时仍在工作,我想知道以哪种方式可以快速完成工作?
Java代码:
public static void main(String[] args) throws IOException {
String source = "/Users/leo/logs/p2pservice/access/a2.output";
String target = "/Users/leo/logs/p2pservice/access/targetUrls";
File targetFile = new File(target);
String splinter = "\\?";
List<String> strings = Files.readLines(new File(source), Charsets.UTF_8);
for (String string : strings) {
if (string.contains("?")) {
String[] split = string.split(splinter);
Files.append(string.split(splinter)[0].toString() + "\n", targetFile, Charsets.UTF_8);
} else {
Files.append(string + "\n", targetFile, Charsets.UTF_8);
}
}
}
提前致谢。
答案 0 :(得分:3)
awk
救援!
$ awk -F'[ ?]' '{a[$2]+=$1} END{for(k in a) print a[k], k}' file
14341 /repay/query_need_repay_data.action