numfmt ungültige Suffixeingabe

numfmt ungültige Suffixeingabe

Ich verwende es, numfmtum eine Remote-Datei Content-Lengthvon Bytes in das IEC-Format zu konvertieren, d. h.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

Ich bin ratlos, warum numfmt sich über ein ungültiges Suffix beschwert. Wenn ich den Befehl aufteile, die Ausgabe von überprüfe cutund den Wert manuell an echoe numfmt, funktioniert es wie erwartet

$ 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

Übersehe ich hier etwas?

Antwort1

Es scheint, dass die Ausgabe von curlWagenrückläufe enthält und dieNummeran die übergeben wird, numfmtenthält eins. Sie können das vor der Übergabe an entfernen numfmt:

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

Beachten Sie außerdem, dass grepund cutnormalerweise durch einen anderen einzelnen Befehl ersetzt werden kann.

Antwort2

Es gab einen Fehler in coreutils-8.21, bei dem wir den fehlerhaften Inhalt nicht korrekt zitiert haben. Wenn Sie es mit der bereits veröffentlichten Version 8.22 ausführen, tritt ein offensichtlicherer Fehler auf:

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

Beachten Sie, dass Leerzeichen oder Tabulatoren nach der Zahl von numfmt ignoriert werden (da es isblank() verwendet). Um \r zu ignorieren, müsste jedoch isspace() verwendet werden. Ich denke, es ist richtig, nur Leerzeichen zu ignorieren.

verwandte Informationen