Я считаю, что самая простая команда это
sort -t- -k3.1,3.4 -k2,2 file
Это сортирует по четырем символам третьего поля и разрешает ничьи путем сортировки по второму полю. Если ничьи все еще не разрешены, порядок будет определен автоматически путем сравнения всех остальных полей, начиная с первого.
Обратите внимание, что вся сортировка выполняется в алфавитном порядке, поскольку числа являются целыми положительными числами, поэтому добавление дополнительных n
не имеет значения.
Образец для испытаний:
06-12-2016,12:00,gym,leg day
05-04-2018,12:09,gym,hands
09-08-2019,13:11,movies,horror
09-08-2019,13:09,movies,horror
09-08-2019,13:08,movies,horror
08-08-2019,13:09,movies,horror
05-04-2019,14:07,gym,hands
23-03-2018,16:47,dance class
25-04-2019,13:29,dance class
05-12-2017,14:45,songwriting
Отсортированный результат:
06-12-2016,12:00,gym,leg day
05-12-2017,14:45,songwriting
23-03-2018,16:47,dance class
05-04-2018,12:09,gym,hands
05-04-2019,14:07,gym,hands
25-04-2019,13:29,dance class
08-08-2019,13:09,movies,horror
09-08-2019,13:08,movies,horror
09-08-2019,13:09,movies,horror
09-08-2019,13:11,movies,horror
В последней версии busybox -1.32 параметр конфигурации FEATURE _TEE _USE _BLOCK _IO для оптимизации производительности tee
апплет установлен на "да" по умолчанию:
config FEATURE_TEE_USE_BLOCK_IO
bool "Enable block I/O (larger/faster) instead of byte I/O"
default y
depends on TEE
help
Enable this option for a faster tee, at expense of size.
В busybox -1.15 для этого же параметра по умолчанию установлено значение "нет" . Это может объяснить, почему tee
работает медленно в вашей системе с busybox -1.15 .
Когда ФУНКЦИЯ _ТРОЙНИК _ИСПОЛЬЗОВАНИЕ _БЛОК _В/В не установлено , tee
выполняет посимвольное копирование своего ввода (с getchar())на его выходы (с putc()):
setvbuf(stdout, NULL, _IONBF, 0);
while ((c = getchar()) != EOF) {
fp = files;
do
putc(c, *fp++);
while (*fp);
}
Когда для ФУНКЦИЯ _ТРОЙНИК _ИСПОЛЬЗОВАНИЕ _БЛОК _В/В установлено , tee
вместо этого используется копия из буфера:
while ((c = safe_read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
fp = files;
do
fwrite(buf, 1, c, *fp++);
while (*fp);
}