numfmt неверный ввод суффикса

numfmt неверный ввод суффикса

Я использую numfmtдля преобразования удаленного файла Content-Lengthиз байтов в формат IEC, т.е.21M

$ curl -sI http://jruby.org.s3.amazonaws.com/downloads/1.7.12/jruby-bin-1.7.12.tar.gz|grep Length|cut -d' ' -f2|numfmt --from=auto --to=iec
'numfmt: invalid suffix in input: '21981488

Озадачен, почему numfmt жалуется на недопустимый суффикс. Когда я разделяю команду и проверяю вывод cut, и вручную вывожу значение в numfmt, все работает как и ожидалось

$ curl -sI http://jruby.org.s3.amazonaws.com/downloads/1.7.12/jruby-bin-1.7.12.tar.gz|grep Length|cut -d' ' -f2 -
21981488
$ echo 21981488|gnumfmt --from=auto --to=iec
21M

Я что-то упустил?

решение1

Кажется, что вывод curlсодержит возврат каретки ичислобудучи переданным в numfmtвключает один. Вы можете удалить это перед передачей в numfmt:

curl ... | awk -F: '/Length/{sub("\r", "", $2); print $2}' | numfmt ...

Более того, обратите внимание, что grepand cutобычно можно заменить альтернативной одиночной командой.

решение2

В coreutils-8.21 была ошибка, из-за которой мы неправильно цитировали ошибочное содержимое. Если вы запустите уже выпущенную версию 8.22, то получите более очевидную ошибку:

numfmt: invalid suffix in input: ‘21981488\r’

Обратите внимание, если после числа есть пробелы или табуляции, то numfmt проигнорирует их (так как использует isblank()), но для игнорирования \r потребуется использовать isspace(). Игнорирование только пробелов — это правильно, я думаю.

Связанный контент