【问题标题】:Print Date and Username from a secure log file从安全日志文件打印日期和用户名
【发布时间】:2022-11-23 23:47:15
【问题描述】:

我正在尝试从 /var/log/secure 获取用户名和日期 'y/m/d',但是当我尝试使用 awk 时,它只提供日期。

安全日志文件的示例。

2022-11-23T02:03:24.594880+01:00 servername su: pam_unix(su:session): session opened for user john.doe by (uid=0)

我期望打印的是:2022-11-23 john.doe

这是我的代码。

cat /var/log/secure | grep 'session opened' | awk -FT '{print $1 " " " User: " $9 }'

“输出只有:2022-11-23 User:"

我对此很陌生,因此非常感谢您的帮助。谢谢你。

【问题讨论】:

    标签: bash awk rhel


    【解决方案1】:

    您使用 T 字符作为字段分隔符。

    这为您提供了 2 个字段,其中字段 1 是 2022-11-23,然后打印 User:


    您可能会使用 1 个或多个空格或 T 作为字段分隔符,然后打印字段 1 和字段 10:

     awk -F"[[:blank:]]+|T" '{print $1, $10 }' file
    

    另一种选择是将第一个字段拆分为 T 而不是整行,然后打印第一部分,然后打印字段 9:

    awk '{split($1,a,"T"); print a[1], $9}'
    

    或者匹配后跟 T 的类似日期的模式,然后打印不带 T 后跟字段 9 的匹配项:

    awk 'match($0, /^[[:digit:]][[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]]-[[:digit:]][[:digit:]]T/) {
      print substr($0,RSTART,RLENGTH-1), $9
    }'
    

    输出

    2022-11-23 john.doe
    

    【讨论】:

      【解决方案2】:

      假设 date 总是排在第一位,而 username 位于字符串 userby 之间 sed 解决方案类似于:

      sed '/session opened/s/^([^T]*).* user (.*) by .*$/ /' /var/log/secure
      

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 1970-01-01
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-25
        • 2015-07-25
        • 1970-01-01
        相关资源
        最近更新 更多