Сортировка Unix при сбросе последовательности

Да, обычно это делается с помощью драйвера ядра, который можно либо загрузить как модуль ядра, либо скомпилировать в ядро.

Вы можете ознакомиться с похожими драйверами файловой системы и узнать, как они работают здесь .

Эти драйверы, вероятно, используют внутренние функции ядра для доступа к устройствам хранения в виде блоков байтов, но вы также можете использовать блочные устройства, представленные драйверами в папках блочных устройств и символьных устройств .

2
27.04.2020, 15:48
1 ответ

Вы не можете легко отсортировать часть вывода одним способом, но сделать исключение другим способом.

Если бы только 999и 000были последовательностями за одну минуту, вы могли бы попытаться разбить имя файла на поля и отсортировать последнее поле (счетчика последовательности )в порядке убывания. Но это не сработает, потому что ваш пример показывает 995и 996также в одну и ту же минуту (20200420_1755), и к ним также будет применяться тот же критерий сортировки (, то есть вы получите 996, за которым следует 995). ].

Итак, чтобы справиться с этой конкретной ситуацией, мы используем некоторые awk. Код преобразует ваш трехзначный порядковый номер обратно в правильное счетное значение, сортирует по нему, а затем снова удаляет его

.
ls node* |
    sort |                                                  # First pass attempt
    awk -F_ '
        BEGIN { OFS = FS }                                  # Delimiter always "_"
        (oseq % 1000) == 999 { thousands++ }                # After previous 999 add 1000
        { seq = $NF + (thousands * 1000) }                  # Convert sequence into value
        seq < oseq && (seq % 1000) < 500 { seq += 1000 }    # Special case
        { $5 = seq; oseq = seq; print }                     # Append counter, output result
    ' |
    sort -t_ -n -k5,6 |                                     # Sort by counter
    cut -d_ -f1-4                                           # Strip it off

Результат с использованием вашего примера набора данных

node55_20200420_1755_995
node55_20200420_1755_996
node55_20200420_1756_997
node55_20200420_1756_998
node55_20200420_1757_999
node55_20200420_1757_001
node55_20200420_1758_002
node55_20200420_1758_003

Этот код не является пуленепробиваемым. Если вы действительно хотите генерировать более 100 экземпляров за одну минуту, вам не следует использовать только трехзначный порядковый номер.

1
19.03.2021, 02:25

Теги

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