Стабильная сортировка GNU sort, когда sort не знает порядок сортировки

Is there a way to ignore the tabs - Size; Used; Avail; Use%;

Поля вывода команды dfнастраиваются с помощью опции --output:

.
df -h --output='source'

Приведенное выше выведет только файловую систему список имен

Filesystem
/dev/mapper/vg00-lvroot

--output[=FIELD_LIST]
use the output format defined by FIELD_LIST, or print all fields if FIELD_LIST is omitted.


Если некоторые параметры не поддерживаются, попробуйте следующий обходной путь сawk:

df -h | awk '{print $1}'
18
30.07.2019, 18:35
2 ответа

Вы можете использовать awk для запуска новой сортировки для каждого блока:

% awk -v cmd="sort -k2,2" '$1 != prev {close(cmd); prev=$1} {print | cmd}' foo
C 1
C 2
A 1
A 2
B 1
B 2
  • $1 != prev {close(cmd); prev=$1}-когда сохраненное значение отличается, у нас есть новый блок, поэтому мы закрываем все ранее начатыеsort
  • {print | "sort -k2,2"}'направляет вывод в sort, запуская его, если он еще не запущен (awk может отслеживать команды, которые он запускает)
20
27.01.2020, 19:46

Вы можете использовать преобразование Шварца(это в основном метод украшения -сортировки -undecorate, о котором вы упоминали в комментарии, но, вероятно, он более эффективен, чем прекрасный ответ муруиз-за использования одного sortвызова, а не нескольких)-с использованием awkдобавить столбец префикса, который увеличивается с изменением значения в первом столбце, сортировать по столбцу префикса , за которым следует «второй» столбец (, порядковый номер которого временно сместился на 3из-за наличия столбца префикса ), и, наконец, избавиться от столбца префикса

awk '{print ($1 in a? c+0: ++c)"\t" $0; a[$1]}' file | sort -k1,1n  -k3,3 | cut -f 2-
12
27.01.2020, 19:46

Теги

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