Как использовать Runtime.getRuntime (). Exec () или ProcessBuilder или любой другой способ выполнить сложную / гибридную команду Unix / Linux в Java. - PullRequest
0 голосов
/ 11 сентября 2018

Я написал команду

for i in `cat  ./files/logs1.txt | grep -o '[[:digit:]]*' | cut -c 1-3 | sort| uniq -c | sort -nr | sed 1d | head -n 10 | awk '{print $2}' `; do grep ^$i ./files/logs1.txt > $i.txt; done

, которая отлично работает с терминала.Но мне нужно запустить его с помощью Java.Я пытался использовать Runtime.getRuntime (). Exec () и ProcessBuilder, но я не уверен, как разбить эту команду на строковый массив, который помог бы мне выполнить это.

String myCommand = "for i in `cat  ./files/logs1.txt | grep -o '[[:digit:]]*' | cut -c 1-3 | sort| uniq -c | sort -nr | sed 1d | head -n 10 | awk '{print $2}' `; do grep ^$i ./files/logs1.txt > $i.txt; done";
    Process p = r.exec(new String[] { "bash", "-c", myCommand });
    p.waitFor();
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = "";

    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }


    br.close();
...