一个Linux命令Java实现

太久没写数据结构算法了,不知道是想考我数据结构还是考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();
            }

        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值