在bash中按日期字段排序日志

时间:2011-03-09 08:14:26

标签: linux bash sorting scripting awk

让我们拥有

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

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

非常感谢。

马丁

4 个答案:

答案 0 :(得分:33)

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

  • -k2M按月逐列排序(这种方式“三月”出现在“四月”之前)
  • -k3n在数字模式下按第三列排序(以便“9”出现在“10”之前)
  • -k4按第四列排序。

查看更多详情in the manual

答案 1 :(得分:6)

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

查看更多详情here

答案 2 :(得分:5)

有点偏离主题 - 但无论如何。仅在filetrees中工作时才有用

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;

答案 3 :(得分:3)

您可以使用sort命令:

cat $logfile | sort -M -k 2

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