2017-06-19 23 views
0

我注意到'grep'命令删除列名。 我需要根据以下命令定制的过程的输出:使用'grep'命令将保留列名的方式

ps -ef | egrep "java|mysql" | awk {'print $1, $2, $8'} 

定期“PS”(或者甚至与“AWK”)具有列名:UID,PID等... 然而,当我添加'grep'的列名不见了。 理想情况下,我必须有显示4列的'ps'输出 - PID,用户名,CMD和内存使用情况。 我如何获得它保留列名称。

+0

关于什么的'顶-p $ pid'? –

回答

1

grep命令将剥去标题,因为它们不匹配。除了搜索模式外,只需使用awk并匹配第一行的条件。

ps -ef | awk 'NR==1{print $1,$2,$8} /java|mysql/{print $1, $2, $8}' 
+0

谢谢,它的作品,但不幸的是不完全是我的需要。我正在尝试使用'ps -aux | awk'NR == 1 {print $ 1,$ 2,$ 8}/java | mysql/{print $ 1,$ 2,$ 8}''有内存使用。问题是我必须只监视从'/ opt'目录启动的进程,这里'grep'修剪头文件。 @ merlin2011 - 除'grep'之外,有什么方法可以过滤吗? – faceless

+0

我不清楚你的问题与使用或不使用grep有关。我的答案不使用grep。 – merlin2011

+0

是的,它服务于我的需求,但部分。我想只从某个目录过滤进程: 'ps -aux | awk'NR == 1 {print $ 2,$ 1,$ 4,$ 3,$ 11}/java | mysql/{print $ 2,$ 1,$ 4,$ 3,$ 11}'' 其中$ 11是命令本身(header COMMAND)。在其他情况下,我会用'|来过滤它grep/opt',但是如果你的解决方案会破坏头文件。你有一个想法如何按目录过滤没有grep? – faceless

0

使用权力bash

$ cat pid_top.sh 
#!/bin/bash 

echo "Enter String:" 
read p 

top -n 1 -b -p $(ps -e | grep $p | awk '{print $1}') | tail -n 2 

不要忘记chmod +x pid_top.sh

做一个别名或名称来运行脚本,输入一个字符串,例如用于Firefox只是的你会有像这样的输出:

$ ./p* 
Enter String: 
fire 
PID USER  PR NI VIRT RES SHR S %CPU %MEM  ZEIT+ BEFEHL 
2983 bang  20 0 1605624 600168 108940 S 0,0 15,1 40:28.10 firefox 
+0

Hi @John, 感谢您的评论。但是,您的建议似乎更适合台式机,而不是强化的服务器。无论如何,我用另一个应用程序试了一下,得到了以下输出: 'top -hv | -bcHiOSs -d secs -n max -u | U用户-p pid(s)-o字段-w [cols]' – faceless