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캐리지 리턴이 포함되어 있는 것 같습니다.숫자a를 포함 하도록 전달됩니다 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()를 사용해야 합니다. 공백을 무시하는 것이 옳다고 생각합니다.

관련 정보