AWK - 从列表中删除最后一项
Posted
技术标签:
【中文标题】AWK - 从列表中删除最后一项【英文标题】:AWK - Remove last item out of list 【发布时间】:2013-11-12 11:05:34 【问题描述】:我正在尝试获取某个服务的 PID。我正在尝试使用以下命令来做到这一点:
ps aux | grep 'DynamoDBLocal' | awk 'print $2'
给出输出:
1021
1022
1161
这将返回 3 个 PID、2 个我想要的服务和 1 个用于刚刚执行的 grep。我想从列表中删除最后一个 PID(grep 中的那个)。
我怎样才能做到这一点?
【问题讨论】:
***.com/a/3510850/1983854 中有一个很好的方法来解决这个主题。是一样的,但是在那边他们也调用kill
来杀死进程。
注意grep re | awk 'print field
可以替换成awk '/re/ print field'
。
【参考方案1】:
只需使用pgrep
,在这种情况下它是正确的工具:
pgrep 'DynamoDBLocal'
【讨论】:
【参考方案2】:使用grep -v
:
ps aux | grep 'DynamoDBLocal' | grep -v grep | awk 'print $2'
如果你的系统中有pgrep
pgrep DynamoDBLocal
【讨论】:
【参考方案3】:你可以说:
ps aux | grep '[D]ynamoDBLocal' | awk 'print $2'
【讨论】:
【参考方案4】:只需调用awk
ps aux | awk '!/awk/ && /DynamoDBLocal/print $2'
【讨论】:
【参考方案5】:试试pidof
,它应该直接给你pid
。
pidof DynamoDBLocal
【讨论】:
【参考方案6】:回答原始问题:如何从输出中删除行:
ps aux | grep 'DynamoDBLocal' | awk 'print $2' | head --lines=-1
head
允许您查看输入的任何内容的 X(默认 10)第一行。给定一个带有减号的值 X,它会显示除最后 X 行之外的所有行。 '逆'是tail
,顺便说一句(当您对最后 X 行感兴趣时)。
但是,鉴于您寻找 PID 的具体问题,我推荐pgrep
(perreals 回答)。
【讨论】:
【参考方案7】:我不确定ps aux | grep '...'
是否正确。
但假设它是正确的方式,你可以这样做
ps aux | grep '...' | awk ' if (prev) print prev; prev=$2 '
【讨论】:
以上是关于AWK - 从列表中删除最后一项的主要内容,如果未能解决你的问题,请参考以下文章