печать целого числа через запятую - PullRequest
0 голосов
/ 01 октября 2018

Ниже будет распечатан размер в байтах каталога и его содержимого:

ls -lR | grep -v '^d' | awk '{bytes += $5} END {print "Total bytes: " bytes}'

Вывод выглядит так:

Total bytes: 1088328265

Как мне проще всего изменитьмоя команда, чтобы выходные данные имели числа, разделенные запятыми, например:

Total bytes: 1,088,328,265

Ответы [ 2 ]

0 голосов
/ 01 октября 2018
$ awk 'BEGIN{printf "Total bytes: %\047d\n", 1088328265}'
Total bytes: 1,088,328,265

Итак, отбросив обычный совет не разбирать вывод ls и избавиться от grep, поскольку вам никогда не нужен grep при использовании awk, мы можем сделать всю вашу команду:

ls -lR | awk '!/^d/{bytes += $5} END{printf "Total bytes: %\047d\n", bytes}'

\047 - это способ представления одинарных кавычек в скрипте awk, разделенных одинарными кавычками, а затем из руководства по GNU awk :

Символ одинарных кавычек или апострофрасширение POSIX до ISO C. Это указывает на то, что целочисленная часть значения с плавающей запятой или вся часть целочисленного десятичного значения должна иметь символ разделителя тысяч.Это работает только в локалях, которые поддерживают такие символы.Например:

$ cat thousands.awk          Show source program
-| BEGIN { printf "%'d\n", 1234567 }
$ LC_ALL=C gawk -f thousands.awk
-| 1234567                   Results in "C" locale
$ LC_ALL=en_US.UTF-8 gawk -f thousands.awk
-| 1,234,567                 Results in US English UTF locale

Для получения дополнительной информации о локалях и проблемах интернационализации см. Locales .

0 голосов
/ 01 октября 2018

Использование Perl вместо awk:

perl -lane '$bytes += $F[4];
            END { substr $bytes, -3 * $_, 0, ","
                      for reverse 1 .. (length($bytes)-1)/3;
                  print "Total bytes: $bytes"}'
  • -l удаляет символы новой строки из ввода и добавляет их к выводам
  • -n читает строку ввода строкой
  • -a разбивает ввод на пустом пространстве в массив @F
  • substr вставляет пробелы в каждую позицию;мы используем отрицательные позиции, которые считаются справа, но мы начинаем с крайней левой позиции, поэтому цифры не меняются при добавлении запятых
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...