awk + sed  用法有点复杂,自己查帮助吧 :p

解决方案 »

  1.   

    在unix上用AWK分析这个东东不是很难的事呀~!
      

  2.   

    awk是个好东西,那我还是要写shell脚本了?
      

  3.   

    对啊,awk,perl都很容易搞定这个问题
      

  4.   

    public class Proc {
     private String USER;
     private String PID;
     .... %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
    ...set, get...
    }public class Parse {
      public static void main(String[] args) {
        String s = args[0];
        String[] lines = s.split("\\\\n");
        String[] items;
        Collection<Proc> procs = new ArrayList();
        Proc proc;
        for(int i = 0; i < lines.length; i++) {
          proc = new Proc();
          items = lines[i].split(" ");
         proc.setUser(items[0].trim());
         proc.setPID(items[1].trim());
         ...
         procs.add(proc);
        }
        
      }
    }
      

  5.   

    redv(想不出来,就出去转转)的程序我还要再看看以空格来分隔,但是最后一列例如:java RunLinux 存在中间有一个或多个空格的情况
    这样能把整个java RunLinux分辨出来吗?
      

  6.   

    哪位大哥能想个万全之策,我把要求再说清楚一些。请问怎么能清晰的把每个进程的信息取出来,例如
    进程:init 
    user:root
    pid:1 
    %cpu:0.1
    %mem:0.1
    vsz:1416
    rss:512
    ………………我只想用java程序就把这些分析出来,通过空格一行行来分解,但是最后一列command中一般会存在有空格的情况,也可能很长,比如第二行的“syslogd -m 0”,如果通过空格来分解,就不能把“syslogd -m 0”整个取出了
    高手想一个完全的方法啊,100分相送或者给出一个shell脚本,可以获得下各进程详细的信息,并以比较好分析的格式打印出来
    谁解决100全部给了
    USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
    root         1  0.1  0.1  1416  512 ?        S    16:32   0:04 init
    root       586  0.0  0.1  1476  612 ?        S    16:33   0:00 syslogd -m 0
    root         2  0.0  0.0     0    0 ?        SW   16:32   0:00 [keventd]
    root         3  0.0  0.0     0    0 ?        SW   16:32   0:00 [kapm-idled]
    root         4  0.0  0.0     0    0 ?        SWN  16:32   0:00 [ksoftirqd_CPU0]
    root         5  0.0  0.0     0    0 ?        SW   16:32   0:00 [kswapd]
    root         6  0.0  0.0     0    0 ?        SW   16:32   0:00 [kreclaimd]
    root         7  0.0  0.0     0    0 ?        SW   16:32   0:00 [bdflush]
    root         8  0.0  0.0     0    0 ?        SW   16:32   0:00 [kupdated]
    root         9  0.0  0.0     0    0 ?        SW   16:32   0:00 [mdrecoveryd]
    root        13  0.0  0.0     0    0 ?        SW   16:32   0:00 [kjournald]
    root        91  0.0  0.0     0    0 ?        SW   16:32   0:00 [khubd]
    root       591  0.0  0.2  1956 1072 ?        S    16:33   0:00 klogd -2
    rpc        611  0.0  0.1  1560  576 ?        S    16:33   0:00 portmap
    rpcuser    639  0.0  0.1  1612  756 ?        S    16:33   0:00 rpc.statd
    root      1274  0.0  4.0 125444 20652 ?      S    16:51   0:01 ./ns-slapd -D /var/opt/sun/directory-server/slapd-tyzhang -i /var/opt/sun/directory-server/slapd-tyzhang/logs/pid
      

  7.   

    int columnNum = 11;
    String[] elements = row.split("\\s+", columnNum);
      

  8.   

    import java.util.regex.Pattern;public class LinuxPS {
        public static void main(String[] args) {
            String example = "root         1  0.1  0.1  1416  512 ?        S    16:32   0:04 init\n" +
                    "root       586  0.0  0.1  1476  612 ?        S    16:33   0:00 syslogd -m 0\n" +
                    "root         2  0.0  0.0     0    0 ?        SW   16:32   0:00 [keventd]\n" +
                    "root         3  0.0  0.0     0    0 ?        SW   16:32   0:00 [kapm-idled]\n" +
                    "root         4  0.0  0.0     0    0 ?        SWN  16:32   0:00 [ksoftirqd_CPU0]\n" +
                    "root         5  0.0  0.0     0    0 ?        SW   16:32   0:00 [kswapd]\n" +
                    "root         6  0.0  0.0     0    0 ?        SW   16:32   0:00 [kreclaimd]\n" +
                    "root         7  0.0  0.0     0    0 ?        SW   16:32   0:00 [bdflush]\n" +
                    "root         8  0.0  0.0     0    0 ?        SW   16:32   0:00 [kupdated]\n" +
                    "root         9  0.0  0.0     0    0 ?        SW   16:32   0:00 [mdrecoveryd]\n" +
                    "root        13  0.0  0.0     0    0 ?        SW   16:32   0:00 [kjournald]\n" +
                    "root        91  0.0  0.0     0    0 ?        SW   16:32   0:00 [khubd]\n" +
                    "root       591  0.0  0.2  1956 1072 ?        S    16:33   0:00 klogd -2\n" +
                    "rpc        611  0.0  0.1  1560  576 ?        S    16:33   0:00 portmap\n" +
                    "rpcuser    639  0.0  0.1  1612  756 ?        S    16:33   0:00 rpc.statd\n" +
                    "root      1274  0.0  4.0 125444 20652 ?      S    16:51   0:01 " +
                    "./ns-slapd -D /var/opt/sun/directory-server/slapd-tyzhang -i /var/opt/sun/directory-server/slapd-tyzhang/logs/pid";        String[] tabs = {"USER", "PID", "%CPU", "%MEM",
                             "VSZ", "RSS", "TTY", "STAT",
                             "START", "TIME", "COMMAND", };        String[] rows = example.split("\n");        int columnNum = 11;        Pattern p = Pattern.compile("\\s+");        String[] elements;
            for (int i = 0; i < rows.length; i++) {
                elements = p.split(rows[i], columnNum);
                for (int j = 0; j < columnNum; j++) {
                    System.out.println(tabs[j] + ": " + elements[j]);
                }
                System.out.println();
            }
        }
    }自己再做一些相应的修改就可以了
    分还是散了吧, 楼上几位兄弟也挺辛苦的