Angenommen, Sie haben Daten mit Mengen in einem für Menschen lesbaren Format, z. B. die Ausgabe von du -h
, und möchten diese Zahlen weiter bearbeiten. Angenommen, Sie möchten Ihre Daten durch grep leiten, um eine Summierung einer Teilmenge dieser Daten durchzuführen. Sie tun dies ad-hoc auf vielen Systemen, die Sie noch nie gesehen haben, und haben nur minimale Dienstprogramme. Sie möchten Suffix-Konvertierungen für alle Standard-10 ^ n-Suffixe.
Gibt es ein Gnu-Linux-Dienstprogramm zum Konvertieren der angehängten Zahlen in reelle Zahlen innerhalb einer Pipeline? Haben Sie eine Bash-Funktion geschrieben, um dies zu tun, oder eine Perl, die leicht zu merken ist, anstatt eine Länge von Regex-Ersetzungen oder mehrere sed-Schritte?
38M /var/crazyface/courses/200909-90147
2.7M /var/crazyface/courses/200909-90157
1.1M /var/crazyface/courses/200909-90159
385M /var/crazyface/courses/200909-90161
1.3M /var/crazyface/courses/200909-90169
376M /var/crazyface/courses/200907-90171
8.0K /var/crazyface/courses/200907-90173
668K /var/crazyface/courses/200907-90175
564M /var/crazyface/courses/200907-90178
4.0K /var/crazyface/courses/200907-90179
| grep 200907 | <amazing suffix conversion> | awk '{s+=$1} END {print s}'
Relevante Referenzen:
/200907/
vor Ihrem Zeilencode hinzu, z. B.awk '/200907/{s+=$1} END {print s}'
Antworten:
Basierend auf meiner Antwort auf eine der Fragen, mit denen Sie verlinkt haben:
Eine andere Methode, die verwendet wird:
quelle
sed
Befehl in meiner Antwort zu erweitern, würden Sie Klauseln hinzufügen, um zusätzliche SI-Suffixe zu behandeln, wie ich imawk
Befehl zeige .s/T/ * 1000 G;
am Anfang hinzugefügt würde zum Beispiel Terabyte hinzufügen.Sie können dazu reguläre Perl-Ausdrücke verwenden. Zum Beispiel,
Dies ist ein einfaches Skript. Sie können es als Ausgangspunkt betrachten. Hoffe es wird helfen!
quelle
Persönlich würde ich das Flag -h überhaupt nicht verwenden. Die "von Menschen lesbare" Version rundet Zahlen ab, die beim Zurückkonvertieren erneut gerundet werden müssen, um noch weniger genau zu werden. (Zum Beispiel sind 2,7 MB 2831155,2 Bytes. Was haben Sie mit den anderen 0,8 Bytes gemacht ?!)
Andernfalls können Sie darum bitten
units
, MiB / GiB / KiB nur in "B" zu konvertieren, und dies wird erledigt, aber Sie müssten etwas Ähnliches tun (vorausgesetzt, Ihre Ausgabe ist mit Registerkarten versehen, andernfallscut
entsprechend).quelle
units
fehlend in meiner minimalen Distribution! Ich denke, wir würden das alle anders machen, wenn wir die volle Kontrolle über alles hätten.quelle