【问题标题】:Sort logs by date field in bash在bash中按日期字段对日志进行排序
【发布时间】:2011-07-11 17:00:36
【问题描述】:

让我们来

126 Mar  8 07:45:09 nod1 /sbin/ccccilio[12712]: INFO: sadasdasdas
  2 Mar  9 08:16:22 nod1 /sbin/zzzzo[12712]: sadsdasdas
  1 Mar  8 17:20:01 nod1 /usr/sbin/cron[1826]: asdasdas
  4 Mar  9 06:24:01 nod1 /USR/SBIN/CRON[27199]: aaaasdsd
  1 Mar  9 06:24:01 nod1 /USR/SBIN/CRON[27201]: aaadas

我想按日期和时间键对此输出进行排序。

非常感谢。

马丁

【问题讨论】:

  • 这就是为什么使用像“YYYY-MM-DD hh:mm:ss”这样的日期格式总是明智的。
  • 但并不总是提供什么

标签: linux bash sorting scripting awk


【解决方案1】:

对于 GNU 排序:sort -k2M -k3n -k4

  • -k2M 按月按第二列排序(这样“三月”在“四月”之前)
  • -k3n 在数字模式下按第三列排序(因此“9”排在“10”之前)
  • -k4 按第四列排序。

查看更多详情in the manual

【讨论】:

  • -k4 什么都不做(它已经被-k3 覆盖)。您可能希望使用-s,以便其他相同的行(就sort而言)保持与日志文件中相同的顺序。
  • @bobbogo:实际上可以使用-k2M,4,但它不太……有教育意义:)
  • @pooh: 否。-k2M,4M 应用于整个排序键,因此只会使用月份名称。要查看此内容,请添加 --debug 标志。
  • @bobbogo:嗯。在标准中它说:“其他修饰符的行为应类似于相应的选项,但应仅适用于它们所附加的键字段;如果与 field_start、field_end 或两者一起指定,它们将具有此效果。»嗯,M 类型不是 POSIX,所以行为可能不同。
  • @pooh: -k2M,4 的意思是“使用字段 2、3 和 4 作为单个排序字段,将其排序为月份名称。”美好的。问题是,M 首先将任何文本规范化为月份名称,因此在-M 的影响下,包含Dec 22:33:25 [Hello] 之类文本的字段将变为简单的DEC
【解决方案2】:

天需要数字(不是词法)排序,所以应该是sort -s -k 2M -k 3n -k 4,4

查看更多详情here

【讨论】:

    【解决方案3】:

    有点离题 - 但无论如何。仅在文件树中工作时有用

    ls -l -r --sort=time
    

    您可以从这里创建一个单行,例如删除城里最旧的备份。

    ls -l -r --sort=time | grep backup | head -n1 | while read line; do oldbackup=\`echo $line | awk '{print$8}'\`; rm $oldbackup; done;
    

    【讨论】:

      【解决方案4】:

      您可以使用排序命令:

      cat $logfile | sort -M -k 2
      

      这意味着:从第二列 (-k 2) 开始按月份 (-M) 排序。

      【讨论】:

      • 你确定吗?我以前试过。它还按日期和时间排序。绝对没有必要指定第 3 列和第 4 列。另请参见排序手册页:“-k, --key=POS1[,POS2] 在 POS1(原点 1)处开始一个键,在 POS2 处结束它(默认行尾) )" 即该行的其余部分也被考虑。
      • 我已经尝试在我的系统上使用有问题的文件。可能排序的版本不同?对于 3 月 9 日,我有以下顺序(包含 pid 的字符串):27201、12712、27199。
      • 所以我想这真的取决于版本。我也在一台旧的 Solaris 机器上尝试过 - 我的版本不起作用(你的版本可以),而它在 openSuse 11.2(排序(GNU coreutils)7.1)上工作。
      • 问题是 -M 不是 POSIX。我现在不能晒太阳,我稍后再检查。可能它在那里意味着不同的东西?我已经在我的 gentoo 上尝试过你的命令(排序 8.7)......很奇怪。可能与语言环境有关吗?
      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 2013-10-06
      • 2011-10-30
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多