Обычный вариант использования для меня — изменить вывод конвейера команд так, чтобы десятичные числа печатались с разделителями тысяч. Вместо того, чтобы писать функцию или сценарий, я предпочитаю использовать метод, который я могу настроить на лету для любого вывода из конвейера Unix.
Я обнаружил, что printf
(, предоставленный Awk ), является наиболее гибким и запоминающимся способом достижения этой цели. Символ апострофа/одинарной кавычки определяется POSIX как модификатор для форматирования десятичных чисел и имеет то преимущество, что он учитывает локаль -, поэтому он не ограничен использованием запятых.
При выполнении команд Awk из оболочки Unix могут возникнуть трудности с вводом одиночной -кавычки внутри строки, ограниченной одинарными -кавычками (, чтобы избежать расширения оболочки позиционных переменных, например,$1
). В этом случае я считаю, что наиболее читаемый и надежный способ ввести одинарную кавычку -— это ввести ее как восьмеричную управляющую последовательность (, начинающуюся с\0
).
Пример:
printf "first 1000\nsecond 10000000\n" |
awk '{printf "%9s: %11\047d\n", $1, $2}'
first: 1,000
second: 10,000,000
Имитация вывода конвейера, показывающая, какие каталоги используют больше всего дискового пространства:
printf "7654321 /home/export\n110384 /home/incoming\n" |
awk '{printf "%22s: %9\047d\n", $2, $1}'
/home/export: 7,654,321
/home/incoming: 110,384
Другие решения перечислены в Как избежать одинарной кавычки внутри awk .
Примечание :, как указано в Print a Single Quote , рекомендуется избегать использования шестнадцатеричных escape-последовательностей, поскольку они не работают надежно в разных системах.
В верхней строке меню MATE выберите System
> About MATE
. Вы должны получить всплывающее окно -, показывающее номер версии MATE. Нажмите Close
. Фон рабочего стола теперь должен снова работать и быть черным.