Сортировка логов по полю даты в bash - PullRequest
21 голосов
/ 09 марта 2011

давайте иметь

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

Я бы хотел отсортировать этот вывод по ключу даты и времени.

Большое спасибо.

Martin

Ответы [ 4 ]

33 голосов
/ 09 марта 2011

Для сортировки GNU: sort -k2M -k3n -k4

  • -k2M сортирует по второму столбцу за месяц (таким образом, «март» предшествует «апрелю»)
  • -k3n сортирует по третьему столбцу в числовом режиме (так что «9» предшествует «10»)
  • -k4 сортирует по четвертому столбцу.

Подробнее в руководстве .

6 голосов
/ 20 апреля 2011

дней нужна числовая (не лексическая) сортировка, поэтому она должна быть sort -s -k 2M -k 3n -k 4,4

Подробнее здесь .

6 голосов
/ 15 апреля 2011

немного не по теме - но все равно.полезно только при работе с файловыми деревьями

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 голосов
/ 09 марта 2011

Вы можете использовать команду сортировки:

cat $logfile | sort -M -k 2

Это означает: сортировка по месяцам (-M), начиная со второго столбца (-k 2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...