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 - 从列表中删除最后一项的主要内容,如果未能解决你的问题,请参考以下文章

从单链表中删除最后一个节点

如何删除列表中的最后一项?

从数组中删除最后一项(而不是返回项)

我想从列表视图中删除一个项目

从 UICollectionView 中删除最后一项时出现断言失败

Python“for in”循环打印列表中的最后一项