![Solaris 5.8 中的 awk / 从两个字段/行获取值](https://linux22.com/image/106016/Solaris%205.8%20%E4%B8%AD%E7%9A%84%20awk%20%2F%20%E4%BB%8E%E4%B8%A4%E4%B8%AA%E5%AD%97%E6%AE%B5%2F%E8%A1%8C%E8%8E%B7%E5%8F%96%E5%80%BC.png)
我是 UNIX-Solaris 的新手,我必须制作一个脚本,但我遇到了我需要的值的问题。
基本上我需要检测两个进程是否正在运行。我发现我可以使用以下命令获取该信息
ps -fu "user" | grep -i "name_oftheprocess/file"
当我执行它时,我得到了这个信息。
user 16544 16530 0 08:00:00 ? 0:08 /bin/bash /path/file
user 19098 16544 0 15:44:38 ? 0:00 /bin/bash /path/file
所以这里一切都很好。问题是我必须将第 1 行的第二个值 (16544) 与第二行的第三个值 (16544) 进行比较。如果它们匹配,则应发送一条消息,说明一切正常;如果他们不这样做,那就出问题了。
我试图找到如何使用 awk 将这两个值分开。如果我使用
ps -fu "user" | grep -i "name_oftheprocess/file" | awk '{print $2}'
它给了我结果
16544 19098
(最后一个我不需要)
ps -fu "user" | grep -i "name_oftheprocess/file" | awk '{print $2}'
它给了我结果
16530 16544 (this fist one I don't need it)
因此,我希望将这两个值分别存储在一个单独的变量中,然后将其与 if 语句进行比较。
答案1
将您获得的信息通过管道传输到此 AWK 中:
awk 'NR==1{a=$2}NR==3{print a==$3?"everything is ok":"something is wrong"}'
您的情况下的完整命令是:
ps -fu "user" | grep -i "name_oftheprocess/file" | awk 'NR==1{a=$2}NR==3{print a==$3?"everything is ok":"something is wrong"}'
笔记:
这可能不太稳健!此答案将您发布的文本作为输入,如果您提供有关您想要执行的操作的更多详细信息并包含第一个命令的输出,则可能会做出进一步的考虑并找到更合适的解决方案。