1

У меня есть список, который был создан в /var/tmp/file.txt из некоторого скрипта (на машине Solaris), в следующем списке есть 4 поля

Посоветуйте, пожалуйста, как отсортировать список в соответствии со следующим TIMESTAMP (командой sort или другой командой solaris как awk или sed ..... )

например дата и время 15-10-2009 08:29:18 должны быть раньше 15-10-2009 08:29:10 ... и т. д.

пример file.txt (не отсортированный файл)

  PHONE_NUMBER         TIMESTAMP                   ID  TYPE
  -------------------- -------------------        ---- -------------- 
  972544111222         15-10-2009 08:29:18         20  sharp_gx10
  33633333333          24-09-2009 16:17:45         20  other_mm_phone
  841990000043         08-10-2009 09:04:38         60  other_mm_phone
  972541230001         08-10-2009 14:23:48         20  other_mm_phone

1 ответ1

0

Как я сказал в комментарии, формат меток времени делает мой подход запутанным, но в основном это механическое повторение.

awk 'NR>2 {print $1"-"$2"-"$3"-"$4"-"$5}' file.txt |\
awk -F'-' '{print $4"-"$3"-"$2"-"$5"-"$1"-"$6"-"$7}' |\
sort |\
awk -F'-' '{print $5"\t"$1"-"$2"-"$3" "$4"\t"$6"\t"$7}'
  1. Пропустите первые две строки (только заголовок) и преобразуйте оставшиеся строки, чтобы использовать один разделитель (в этом случае через тире, убедитесь, что в последнем поле его нельзя указывать) (изначально он чередуется между пробелами и тире, поскольку формат даты),
  2. разбить поля с помощью тире и переместить дату в начало строки (для удобства использования с sort) и распечатать ее в нисходящем формате,
  3. сортировать и
  4. распечатайте информацию обратно в формате, аналогичном вводу (обменяйте $1 и $3 чтобы получить старый формат даты).

Добавьте строки заголовков назад, если они нужны.


РЕДАКТИРОВАТЬ: Я видел, что вы хотели обратного рода. Просто измените sort на sort -r .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .