Linux 使用';grep';命令保留列名的方式
我注意到'grep'命令删除了列名。 我需要根据以下命令自定义进程的输出:Linux 使用';grep';命令保留列名的方式,linux,bash,Linux,Bash,我注意到'grep'命令删除了列名。 我需要根据以下命令自定义进程的输出: ps -ef | egrep "java|mysql" | awk {'print $1, $2, $8'} 常规的“ps”(甚至带有“awk”)有列名:UID、PID等。。。 但是,当我添加“grep”时,列名就消失了。 理想情况下,我必须有“ps”输出,显示4列-PID、用户名、CMD和内存使用情况。 如何保留列名。grep命令将删除标题,因为它们不匹配。只需使用awk并在搜索模式之外匹配第一行条件 ps -ef
ps -ef | egrep "java|mysql" | awk {'print $1, $2, $8'}
常规的“ps”(甚至带有“awk”)有列名:UID、PID等。。。
但是,当我添加“grep”时,列名就消失了。
理想情况下,我必须有“ps”输出,显示4列-PID、用户名、CMD和内存使用情况。
如何保留列名。grep命令将删除标题,因为它们不匹配。只需使用
awk
并在搜索模式之外匹配第一行条件
ps -ef | awk 'NR==1{print $1,$2,$8} /java|mysql/{print $1, $2, $8}'
使用
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\u 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
谢谢你,它能工作,但不幸的是,它不能完全满足我的需要。我试图使用
ps-aux | awk'NR==1{print$1,$2,$8}/java | mysql/{print$1,$2,$8}'
。问题是,我必须只监视从“/opt”目录启动的进程,这里的“grep”会修剪头@merlin2011-除了“grep”之外还有什么过滤方法吗?我不清楚你的问题与使用或不使用grep有什么关系。我的答案不使用grep。是的,它满足了我的需要,但部分满足了我的需要。我只想从某些目录中筛选进程:ps-aux | awk'NR==1{print$2,$1,$4,$3,$11}/java | mysql/{print$2,$1,$4,$3,$11}
,其中$11是命令本身(header命令)。在其他情况下,我会使用|grep/opt
对其进行过滤,但在您的解决方案中,它会破坏标题。你知道如何在没有grep的情况下按目录过滤吗?忘了标记-@merlin2011Hi@merlin2011,我对你的解决方案做了一些修改,现在它满足了我100%的需求。它看起来像:ps-aux | awk'NR==1{print$2,$1,$4,$3}/java | mysql/{print$2,$1,$4,$3,$11}'| sed-e'1b'-e'/opt/!d'
top-p$pid的内容是什么??你好,约翰,谢谢你的评论。不过,您的建议似乎更兼容台式机,而不是加固服务器。无论如何,我用另一个应用程序进行了尝试,得到了以下输出:top-hv |-bcHiOSs-d secs-n max-u | u user-p pid(s)-o field-w[cols]