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()를 사용해야 합니다. 공백만 무시하는 것이 맞다고 생각합니다.