У меня есть длинный список, созданный в /var/tmp/file.txt с помощью некоторого скрипта (на машине Solaris), следующий список имеет 4 поля
пожалуйста, посоветуйте, как отсортировать список по следующей МЕТКЕ ВРЕМЕНИ (командой 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
Как я уже сказал в комментарии, формат временной метки делает мой подход запутанным, но на самом деле это по большей части механическое повторение.
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}'
- Пропустите первые две строки (только заголовок) и преобразуйте оставшиеся строки так, чтобы они использовали один разделитель (в данном случае дефис, убедитесь, что он не допускается в последнем поле) (первоначально он чередуется между пробелом и дефисом из-за формата даты),
- разделите поля дефисом и переместите дату в начало строки (для удобства использования с
sort
) и выведите ее в убывающем формате, - сортировать и
- распечатать информацию обратно в формате, аналогичном введенному (обменять
$1
и$3
получить старый формат даты).
Добавьте строки заголовка обратно, если они нужны.
РЕДАКТИРОВАТЬ: Я видел, что вы хотели обратную сортировку. Просто измените sort
на sort -r
.