проблема сортировки в bash с несколькими столбцами - PullRequest
0 голосов
/ 27 сентября 2018

Мне нужно отсортировать файл с именем lokdata

 (1) (260, 02) 0x2c435 0x2c43501 Thu Sep 27 09:43:21 2018
 (1) (60, 02) 0x2c435 0x2c43503 Thu Sep 27 09:46:14 2018
 (1) (260, 02) 0x2c435 0x2c43503 Thu Sep 27 09:46:44 2018
 (1) (260, 03) 0x4461e 0x4461e1f Thu Sep 27 10:31:05 2018

Мне нужно отсортировать, что самая последняя дата находится сверху, чтобы я мог использовать голову.Пример неудачной попытки

    sort -k10,10r -r -k7,7M -k 8,8 -k9,9r lokdata


 (1) (260, 02) 0x2c435 0x2c43501 Thu Sep 27 09:43:21 2018
 (1) (260, 02) 0x2c435 0x2c43503 Thu Mar 01 09:46:14 2018
 (1) (260, 02) 0x2c435 0x2c43503 Thu Mar 03 09:46:44 2018
 (1) (260, 02) 0x2c435 0x2c43501 Thu Mar 29 09:43:21 2018
 (1) (260, 03) 0x4461e 0x4461e1f Thu Sep 27 10:31:05 2026

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018
  1. Добавить к каждой строке количество секунд с начала эпохи с даты, которую она имеет
  2. Сортировать по секундам с начала эпохи
  3. Удалить секунды с начала эпохи

cat lokdata |
xargs -d'\n' -l1 -- sh -c 'echo "$(date --date="$(<<<"$1" cut -d " " -f7-)" +%s)" "$1"' -- | 
sort -r -n -k1 | 
cut -d ' ' -f2-

Чтобы сохранить наши процессоры от перегрева, измените cat lokdata | на < lokdata.

Пример жизни на tutorialspoint .

0 голосов
/ 27 сентября 2018

Хорошо, мне пришлось немного поискать, но вот решение:

sort -k10nr,10 -k7Mr,7 -k8nr,8 -k9r,9

, которое выводит

 (1) (260, 03) 0x4461e 0x4461e1f Thu Sep 27 10:31:05 2026
 (1) (260, 02) 0x2c435 0x2c43501 Thu Sep 27 09:43:21 2018
 (1) (260, 02) 0x2c435 0x2c43501 Thu Mar 29 09:43:21 2018
 (1) (260, 02) 0x2c435 0x2c43503 Thu Mar 03 09:46:44 2018
 (1) (260, 02) 0x2c435 0x2c43503 Thu Mar 01 09:46:14 2018

Как это работает?

  1. -k10nr,10: выполнить обратную числовую сортировку по 10-му полю, представляющему год
  2. -k7Mr,7: второй сортировка - сортировка по месяцам, в которой используются стандартные трехзначные обозначения месяцадля сортировки снова в обратном порядке.
  3. k8nr,8: третья сортировка производится в день месяца, который снова является числовым.
  4. -k9r,9: наконец, сортировка 9 полей в виде строкикоторый представляет время, замечательно перевернутое.

Почему это так сложно? С того момента, как вы определяете один модификатор, в спецификации ключа, глобальные флаги -r или-n или что-то более не применимое.Поэтому нельзя смешивать глобальные флаги с модификаторами локальных ключей.

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