4

Какой самый простой способ отсортировать список чисел с добавлением единиц времени в bash или shell? Другими словами, я ищу что-то похожее на «sort -h», но вместо того, чтобы сортировать единицы измерения размера, я хочу отсортировать единицы времени (ns, us, ms, s).

Вот список примеров, которые я хотел отсортировать:
1.234s
804.2754ms
603.223us
50.1234ms

1 ответ1

3

Вот один из способов решения этой проблемы:

  1. Добавьте второй столбец, в котором время пересчитано в ту же единицу
  2. Сортировка ввода по второму столбцу
  3. Оставьте второй столбец

Вы можете выполнить шаг 1 с помощью скрипта awk, который преобразует единицы времени в наносекунды:

{
    time = $1;
    sub(/[a-z]+$/, "", time);
    unit = $1;
    sub(/^[^a-z]+/, "", unit);

    # convert to nanoseconds
    if (unit == "us") {
        time *= 1000;
    } else if (unit == "ms") {
        time *= 1000000;
    } else if (unit == "s") {
        time *= 1000000000;
    }
    print $1, time
}

Если вы сохраните это в файле convert.awk , то можете выполнить шаги 1-3 с этим конвейером:

awk -f convert.awk input.txt | sort -g -k2 | cut -f1 -d' '

-g вместо -n необходим, если некоторые числа отображаются в экспоненциальной записи. (Благодарим ОП за указание на это.)

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