太久没写数据结构算法了,不知道是想考我数据结构还是考API的熟练程度呢。有点紧张,磕磕碰碰写完了,如果时间充足,我想把整个linux的命令的参数都放进函数参数,有限时间很多代码健壮性并没考虑到,例如流的打开关闭。
/**
* 评测题目: 实现以下shell脚本的功能(不使用Stream.api, 题目中awk表示取第三列)
cat /Users/micro/jyxb_gitLab/logs/test.log | grep “login” | awk ‘{print $3}’ | sort | uniq -c | sort -k 2r
902 login lilei www.taobao.com
220 login hmm s.taobao.com
499 visit cde i.taobao.com
879 login lilei s.taobao.com
输出
2 lilei
1 hmm
// ————————-
*/
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
File logFile = new File("/home/admin/logs/webx.log");
inputStreamReader = new InputStreamReader(new FileInputStream(logFile));
bufferedReader = new BufferedReader(inputStreamReader);
List<List<String>> contentList = new ArrayList<List<String>>();
String con
tent = null;
while((content = bufferedReader.readLine()) != null) {
List<String> rawList = new ArrayList<String>();
for (String r : content.split(" ")) {
if (!"".equals(r.trim())) {
rawList.add(r);
}
}
if (rawList.size() > 0) {
contentList.add(rawList);
}
}
// 取第三列
List<String> threeQueueList = new ArrayList<String>();
for (List<String> rowList : contentList) {
threeQueueList.add(rowList.get(2));
}
// 去除重复
Set<String> nameSet = new HashSet<String>(threeQueueList);
// 排序
List<String> nameList = new ArrayList<String>(nameSet);
Collections.sort(nameList, new Comparator<String>() {
public int compare(String a, String b) {
// 比较ascii
char[] aArray = a.toCharArray();
char[] bArray = b.toCharArray();
int p = 0;
while(a.length() > p && b.length() > p) {
if ((int)bArray[p] < (int)aArray[p]) {
return -1;
} else if ((int)bArray[p] > (int)aArray[p]){
return 1;
}
p ++;
}
return 0;
}
});
StringBuilder outContentStringBuilder = new StringBuilder();
outContentStringBuilder.append("1 ").append(nameList.get(0)).append("\n").append("2 ").append(nameList.get(1));
System.out.println(outContentStringBuilder);
} catch (Exception ex) {
} finally {
try {
inputStreamReader.close();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}