Вид разделенные от запятой поля на каждой строке числовым значением

у Вас есть сообщения об ошибках, связанные с eth0 во время начальной загрузки? (посмотрите с dmesg)

возможно, драйвер для Вашей платы Ethernet не загружается, когда конфигурация времени начальной загрузки работает.

8
09.06.2015, 10:29
4 ответа

сортировка работает на целых линиях. По умолчанию она сортирует все содержимое этой строки, но -k можно использовать для сортировки по одному или нескольким полям внутри этих строк. -t можно использовать для изменения разделителя между полями. Не могу придумать случай, когда использование -t без использования также и -k имеет какой-то смысл.

Ваша вторая команда, которая эквивалентна:

printf "%s\n%s\n" "110,20,30,13" "kill,gill,burger" | sort -t',' -n

-t

kill,gill,burger
110,20,30,13

-k, что и следовало ожидать. -t',' не имеет никакого эффекта, так как меняет разделитель полей, когда вы не сказали сортировать, чтобы работать с отдельными полями, и поэтому k сортируется перед 1, так как его числовое значение равно 0 (и вы запросили числовое упорядочивание, используя -n).

11
27.01.2020, 20:09

Сортировка работает по строке, а не по полям внутри строки.

По умолчанию сортирует по первому символу в строке и далее. Но можно сортировать и по "клавишам", кроме как по началу. Это удобно, когда нужно отсортировать по фамилии, или по числовому значению в конце строки, или так далее. Для этого установлен флаг -t - он не будет разбивать отдельные строки и сортировать внутри них.

Если это то, что вы хотите сделать, смотрите Сортировка полей inline

6
27.01.2020, 20:09

Будет проще с perl:

$ perl -F',' -anle '
    BEGIN { $" = "," }
    print "@{[sort {$a <=> $b} @F]}"
' file 
13,20,30,110
kill,gill,burger

Это только сортировка строк, содержащих числа. Если вы хотите, чтобы сортировочные строки содержали строку типа sort -n, попробуйте:

$ $ perl -MPOSIX=isdigit -F',' -anle '
BEGIN { $" = "," }
print "@{[ sort { isdigit($a)
              ? ($a <=> $b)
              : ($a cmp $b)
              } @F
        ]}"
' file
13,20,30,110
burger,gill,kill

Этот подход все еще работает, если типа содержит только строку, неудачно, если типа содержит смешанную строку, числа типа kill,gill,20.

1
27.01.2020, 20:09

Возможна сортировка по запятым:

echo "a,b,z,sa,b,z,a,d,2,4a,a,dx" | tr , "\n" | sort

Выводит

2
4a
a
a
a
b
b
d
dx
sa
z
z

И если вы хотите вернуть его на одну строку:

echo "a,b,z,sa,b,z,a,d,2,4a,a,dx" | tr , "\n" | sort | tr "\n" ,
4
27.01.2020, 20:09

Теги

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