【发布时间】:2017-12-31 20:44:48
【问题描述】:
我正在编写一个脚本,它需要在与 QNX 和 POSIX 兼容的 Linux 兼容的文件中找到完全匹配的文件
更多细节:
我试图找到一个进程的用户,所以我写的原始命令是
user=$(ps -aux | awk '{print $1 " " $2}' | grep -w ${process} | awk '{}print $1')
在兼容 POSIX 的 Linux 中完美运行
但是,QNX 并不完全符合 POSIX,grep -w 不适用于我的目标...所以我需要找到没有grep -w 的完全匹配
【问题讨论】:
-
我相信
awk的一次调用可以完成您希望使用awk ... | grep ... | awk ...实现的任何目标,这几乎总是一个糟糕的结构。请显示您的ps的示例输出,并说明哪些部分需要匹配。如果您的 3 个qnx标记为awk,也可以考虑替换一个。 -
所以我的目标是让进程的用户获得进程 ID,因此我必须从 ps -aux 命令中删除所有垃圾值,这是第一个 awk 的用途(我 awk仅用于 ID 和用户名,并删除所有其他可能搞砸以下 grep -w 的数字)然后我 grep -w ID(我需要确切的 ID,因为您可以拥有 11 和 1112 的 ID,常规 grep 将同时拉动两者)然后我只找出保存到变量中的用户名...也感谢标签上的提示
-
是的,使用单个
awk和诸如awk '/\<PROCESSID\>/ {do something}'之类的单词分隔符 -
@MarkSetchell –
\<和\>字边界字符仅适用于 GNU awk (gawk),如果 GNU grep 不可用,我怀疑 QNX 上是否可用,但你可以这样做ps -aux |awk '$2=="'$process'"{print $1}' -
另外,我很确定你可以使用
ps u $process |awk 'NR>1{print $1}',但我不知道 QNX 的 ps 选项。
标签: linux shell awk qnx qnx-neutrino