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 ...

또한 grep및 는 cut일반적으로 대체 단일 명령으로 대체될 수 있습니다.

답변2

coreutils-8.21에는 잘못된 내용을 올바르게 인용하지 않은 버그가 있었습니다. 이미 릴리스된 8.22로 실행하면 더 분명한 오류가 발생합니다.

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

숫자 뒤에 공백이나 탭이 있으면 numfmt는 이를 무시하지만(isblank()를 사용하므로) \r을 무시하려면 isspace()를 사용해야 합니다. 공백만 무시하는 것이 맞다고 생각합니다.

관련 정보