Załóżmy, że masz dane o ilościach w formacie czytelnym dla człowieka, takie jak dane wyjściowe du -h
i chcesz dalej operować na tych liczbach. Załóżmy, że chcesz przesłać dane przez grep, aby dokonać podsumowania podzbioru tych danych. Robisz to ad hoc na wielu systemach, których nigdy wcześniej nie widziałeś, i posiadasz tylko minimalne narzędzia. Chcesz konwersji sufiksów dla wszystkich standardowych sufiksów 10 ^ n.
Czy istnieje narzędzie gnu-linux do konwertowania sufiksowanych liczb na liczby rzeczywiste w potoku? Czy masz napisaną do tego funkcję bash, czy jakiś perl, który może być łatwy do zapamiętania, zamiast długiej wymiany wyrażeń regularnych lub kilku kroków sed?
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}'
Odpowiednie referencje:
/200907/
przed kodzie za linię, npawk '/200907/{s+=$1} END {print s}'
Odpowiedzi:
Na podstawie mojej odpowiedzi na jedno z pytań, do których linkujesz:
Inna stosowana metoda:
źródło
sed
polecenie w mojej odpowiedzi, należy dodać klauzule do obsługi dodatkowych sufiksów SI, jak pokazuję wawk
poleceniu.s/T/ * 1000 G;
dodane na początku dodają na przykład terabajty.Możesz użyć do tego wyrażeń regularnych perla. Na przykład,
To jest prosty skrypt. Możesz uznać to za punkt wyjścia. Mam nadzieję, że to pomoże!
źródło
Osobiście po prostu nie używałbym flagi -h. Wersja „czytelna dla człowieka” zaokrągla liczby, które trzeba będzie ponownie zaokrąglić po ponownej konwersji, uzyskując jeszcze mniejszą dokładność. (Na przykład 2,7 Mb to 2831155.2 bajtów. Co zrobiłeś z pozostałymi 0,8 bajtu ??!)
W przeciwnym razie możesz poprosić
units
o konwersję MiB / GiB / KiB do samego „B”, a on sobie z tym poradzi, ale musisz zrobić coś takiego (zakładając, że twój wynik jest tabulowany, w przeciwnym raziecut
odpowiednio)źródło
units
brakowało mi na mojej minimalnej dystrybucji! Myślę, że wszyscy zrobilibyśmy to inaczej, gdybyśmy mieli pełną kontrolę nad wszystkim.źródło