这是我的密码
awk '{a[$1":"$5]}
END{for(i in a)
{
split(i,b,":");
split(b[2],c,"[");
print b[1],b[2]
}
}' /var/log/messages
输出为:(显示月份和进程名)
May init
May rhsmd
May kernal
我想把进程名改为简短的描述。
简短的描述是基于“人”的文件。
这个命令帮助我打印我想要的东西。
man init | sed -n '6p' | cut -c 8-
输出:
init - Upstart process management daemon
最后,我找不到一种方法来嵌入“man”代码来awk。
以下是我预期的最终结果,
我该怎么做?谢谢您。
May init - Upstart process management daemon
May rhsmd - A Program for querying the Red Hat Network for updates and information
May kernal
有一些/var/log/messages示例
May 21 03:30:02 redhat rhsmd: This system is registered to RHN Classic.
Sep 22 03:35:02 redhat rhsmd: This system is registered to RHN Classic.
May 22 13:00:31 redhat init: serial (hvc0) main process (1326) killed by TERM signal
May 22 13:00:31 redhat init: tty (/dev/tty6) main process (1336) killed by TERM signal
May 22 13:00:32 redhat rhnsd[1256]: Exiting
最佳答案
这个脚本适合我:
更新-基于tripleee's answer使用awk
#!/usr/bin/awk -f
$NF !~ /Exiting/ {
split($5, a, ":")
name = a[1]
if (!s[name]) {
"whatis " name | getline w
if (w !~ /nothing/) {
split(w,b,"- ")
s[name] = b[2]
}
else s[name] = "none"
}
printf("%s %s %s\n", $1, a[1], (s[name] != "none" ? "- " s[name] : ""))
}
这将从
whatis
数据库中建立程序描述的缓存,因此每个进程只查找一次。在我的系统whatis
中,如果没有条目,则给出消息“cc>”,所以在结果中检查这个条目。它只报告不在“退出”中结束的行。示例输出(注意,我的系统上没有
whatis
):May rhsmd
Sep rhsmd
May init - process control initialization
May init - process control initialization