这是我的密码

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

08-15 23:28