Bash: вывод количества строк из wc в удобочитаемом формате

Это возможно? Выполняя wc прямолинейно, я должен потратить некоторую умственную энергию, чтобы увидеть, что файл содержит более 40 миллионов строк:

$ wc -l 20150210.txt 
    45614736 20150210.txt

Я поискал и нашел numfmt, но он, очевидно, недоступен в OSX (и в brew). Так есть ли простой способ сделать это на OSX? Спасибо.


person luffe    schedule 12.05.2015    source источник
comment
Делает ли printf "%'d\n" 45614736 то, что вы хотите, в OS X? (Я не знаю, насколько переносима эта строка формата.)   -  person Etan Reisner    schedule 12.05.2015
comment
Примечание gnumfmt должно быть доступно через brew install coreutils   -  person pixelbeat    schedule 05.09.2015


Ответы (1)


Если у вас есть печать POSIX, вы можете использовать %'d:

printf "%'d\n" $(wc -l < file )

Из man printf:

'

Для десятичного преобразования (i, d, u, f, F, g, G) вывод должен быть сгруппирован с тысячами группирующих символов, если информация о локали указывает на это. Обратите внимание, что многие версии gcc(1) не могут анализировать эту опцию и выдают предупреждение. SUSv2 не включает %'F

Тест

$ seq 100000 > a
$ printf "%'d\n" $(wc -l <a )
100,000

Обратите также внимание на прием wc -l < file для получения номера без имени файла.

person fedorqui 'SO stop harming'    schedule 12.05.2015
comment
Спасибо, но когда я делаю $printf "%'d\n" 45614736, я получаю вывод 45614736 без форматирования. Странный? - person luffe; 12.05.2015
comment
Вывод из %'d зависит от локали. Каков результат locale | grep LC_NUMERIC? - person chepner; 12.05.2015
comment
А, там написано LC_NUMERIC="C" - person luffe; 12.05.2015
comment
Я сделал LC_NUMERIC="en_US.UTF-8". Теперь это работает. Спасибо - person luffe; 12.05.2015