有处理字符串的高手吗,进来看看 awk + sed 用法有点复杂,自己查帮助吧 :p 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在unix上用AWK分析这个东东不是很难的事呀~! awk是个好东西,那我还是要写shell脚本了? 对啊,awk,perl都很容易搞定这个问题 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); } }} redv(想不出来,就出去转转)的程序我还要再看看以空格来分隔,但是最后一列例如:java RunLinux 存在中间有一个或多个空格的情况这样能把整个java RunLinux分辨出来吗? 哪位大哥能想个万全之策,我把要求再说清楚一些。请问怎么能清晰的把每个进程的信息取出来,例如进程:init user:rootpid:1 %cpu:0.1%mem:0.1vsz:1416rss:512………………我只想用java程序就把这些分析出来,通过空格一行行来分解,但是最后一列command中一般会存在有空格的情况,也可能很长,比如第二行的“syslogd -m 0”,如果通过空格来分解,就不能把“syslogd -m 0”整个取出了高手想一个完全的方法啊,100分相送或者给出一个shell脚本,可以获得下各进程详细的信息,并以比较好分析的格式打印出来谁解决100全部给了USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.1 0.1 1416 512 ? S 16:32 0:04 initroot 586 0.0 0.1 1476 612 ? S 16:33 0:00 syslogd -m 0root 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 -2rpc 611 0.0 0.1 1560 576 ? S 16:33 0:00 portmaprpcuser 639 0.0 0.1 1612 756 ? S 16:33 0:00 rpc.statdroot 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 int columnNum = 11;String[] elements = row.split("\\s+", columnNum); 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(); } }}自己再做一些相应的修改就可以了分还是散了吧, 楼上几位兄弟也挺辛苦的 一个简单的程序,请帮助我 用C/S结构做一个项目,为了减少对数据库的访问次数,需要启动项目时把数据存起来放到内存里,供以后使用,请问放到内存里的方式有哪些? 3q~ Java 练习题目 不知道怎么改 统计字数 返回日期问题 [闭月羞花猫] C++ OR JAVA ? 对前两天写的一个小建议的一点点补充 关于JAVA中的Dialog字体问题 关于interface Comparator?? java applet 中画线粗细如何控制? 问几个内存释放的小问题 如何写和用icmp的ping命令一样的程序。
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);
}
}
}
这样能把整个java RunLinux分辨出来吗?
进程: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
String[] elements = row.split("\\s+", columnNum);
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();
}
}
}自己再做一些相应的修改就可以了
分还是散了吧, 楼上几位兄弟也挺辛苦的