zoukankan      html  css  js  c++  java
  • java 调用 linux 命令行 +使用管道、awk等命令进行数据处理的方法

    这里用 sh -c "命令" 的方式是因为java里只能这么用,管道这边java处理不了,所以只能一次执行一条命令,但是在linux里用 sh -c 的方式返回的awk处理过的结果是有问题的,比如下面:

    [root@192 ~]# sh -c  "ping www.baidu.com -c 3 | awk -F '[ ]+' 'NR==8 {print $4}'"
    rtt min/avg/max/mdev = 3.514/3.778/4.232/0.329 ms

    但是在java代码里却能够成功执行所需要的功能,可能是java执行后产生的是下面这样的效果:

    [root@192 ~]# ping www.baidu.com -c 3 | awk -F '[ ]+' 'NR==8 {print $4}'
    2.586/4.436/6.657/1.683

    下面的java代码能够在 CentOS Linux release 7.6.1810 (Core) 下实现效果(取得ms值):

    package com.kinome.surveillance.detect.connectivity;
    
    public class UpDateConnectivity {
    
        public static String upDateConnectivity(int rid, String ptLink) {
    
            String targetUrl = FilterHttpHeader.filterHttpHeader(ptLink);
            String canPingTargetUrl = ConnectionTimeMatchHandler.getFilteredResult(targetUrl, "(.*?)/");
    //        String TimeLine = RunCmdGetConnectionTimeHandler.getAverageTimeLine(canPingTargetUrl);
    //        String connectTime = ConnectionTimeMatchHandler.getFilteredResult(TimeLine, "平均 = (.*?)ms").toString();
            String avg1 = RunCmdGetConnectionTimeHandler.fetchAvg1(canPingTargetUrl);
            String connectTime = RunCmdGetConnectionTimeHandler.fetchAvg2(avg1);
            System.out.println("avg = " + connectTime + " ms");
            return connectTime;
        }
    }
    public static String fetchAvg1(String targetUrl) {
            BufferedReader br = null;
            String result = null;
            try {
                List<String> cmds = new LinkedList<String>();
                cmds.add("sh");
                cmds.add("-c");
                cmds.add("ping " + targetUrl + " -c 3 | awk -F '[ ]+' 'NR==8 {print $4}'");
                ProcessBuilder pb = new ProcessBuilder(cmds);
                pb.redirectErrorStream(true);
                Process p = pb.start();
                p.waitFor(3, TimeUnit.SECONDS);
                br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                StringBuffer sb = new StringBuffer();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
                result = sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            return result;
        }
    
        public static String fetchAvg2(String avg1) {
            BufferedReader br = null;
            String result = null;
            try {
                List<String> cmds = new LinkedList<String>();
                cmds.add("sh");
                cmds.add("-c");
                cmds.add("echo " + avg1 + " | awk  -F '[/]+' '{print $2}'");
                ProcessBuilder pb = new ProcessBuilder(cmds);
                pb.redirectErrorStream(true);
                Process p = pb.start();
                p.waitFor(3, TimeUnit.SECONDS);
                br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                StringBuffer sb = new StringBuffer();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
                result = sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            return result;
        }
  • 相关阅读:
    jquery ajax全解析
    java 远程调试 remote java application
    w3c html dom
    ngx_php
    websocket+前后端分离+https的nginx配置
    CentOS6下基于Nginx搭建mp4/flv流媒体服务器
    nginx could not build the server_names_hash 解决方法
    Nginx 实现AJAX跨域请求
    Nginx与Apache的Rewrite规则的区别
    nginx支持pathinfo模式
  • 原文地址:https://www.cnblogs.com/kinome/p/10470112.html
Copyright © 2011-2022 走看看