Сортировка столбца с двумя разными форматами даты и времени

Это работает для меня:

sudo dmidecode | grep "BIOS Information" -A10 | grep -e "Version:" -e "Vendor:"
0
07.05.2020, 04:18
2 ответа

Вы можете преобразовать оба формата во что-то однозначное, например, время эпохи, отсортировать по нему, а затем отбросить. Например, используя Миллера

mlr --tsv put '
  $epoch = ($date =~ "^[A-Z][a-z][a-z]") ? strptime($date,"%a %b %d %H:%M:%S %Z %Y") : strptime($date,"%Y-%m-%d %H:%M:%S")
' then sort -n epoch then cut -f date input
1
28.04.2021, 23:16

Попробуйте преобразовать ваш формат "%a %b %d %H:%M:%S %Z %Y"(или любой другой формат, распознаваемый date -d). на%F %T(%Y-%m-%d %H:%M:%S)с помощью awkи команды date.

Номер поля для преобразования задается в переменной awk col, и поле пропускается, если оно уже имеет правильный формат. Ну, вы можете убрать галочку, но очевидно, что это замедлит работу скрипта.

awk -v col=3 '
  BEGIN{ FS=OFS="\t" }

  # or remove the check and begin the next line with an opening `{`
  $(col) !~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/{
    cmd="date -u -d \"" $(col) "\" +\"%F %T\"" 
    cmd | getline $(col)
    close(cmd)
    $0=$0
  }
  1
' infile > outfile

Затем используйте лексикографическую сортировку в нужном поле, например. sort -t$'\t' -k3,3 file.

0
28.04.2021, 23:16

Теги

Похожие вопросы