Katakanlah Anda memiliki data dengan jumlah dalam format yang dapat dibaca manusia, seperti output dari du -h
, dan ingin beroperasi lebih lanjut pada angka-angka itu. Katakanlah Anda ingin menyalurkan data Anda melalui grep untuk melakukan penjumlahan dari sub-set data tersebut. Anda melakukan ini ad-hoc pada banyak sistem yang belum pernah Anda lihat sebelumnya, dan hanya memiliki utilitas minimal. Anda ingin konversi sufiks untuk semua sufiks standar 10 ^ n.
Ada utilitas gnu-linux untuk mengubah angka sufiks menjadi bilangan real dalam pipa? Apakah Anda memiliki fungsi bash yang ditulis untuk melakukan ini, atau perl yang mungkin mudah diingat, alih-alih panjang penggantian regex atau beberapa langkah 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}'
Referensi yang relevan:
/200907/
di depan kode per-line Anda, mis.awk '/200907/{s+=$1} END {print s}'
Jawaban:
Berdasarkan jawaban saya di salah satu pertanyaan yang Anda tautkan:
Metode lain yang digunakan:
sumber
sed
perintah dalam jawaban saya, Anda akan menambahkan klausa untuk menangani sufiks SI tambahan seperti yang saya tunjukkan dalamawk
perintah.s/T/ * 1000 G;
ditambahkan di awal akan menambah terabyte, misalnya.Anda dapat menggunakan perl ekspresi reguler untuk melakukan ini. Sebagai contoh,
Ini adalah skrip sederhana. Anda bisa menganggapnya sebagai titik awal. Semoga ini bisa membantu!
sumber
Secara pribadi, saya tidak menggunakan flag -h di tempat pertama. Versi "yang dapat dibaca manusia" membulatkan angka-angka yang perlu dibulatkan lagi ketika Anda mengonversi kembali, menjadi semakin tidak akurat. (Misalnya, 2.7MiB adalah 2831155.2 byte. Apa yang Anda lakukan dengan 0,8 byte lainnya ??!)
Jika tidak, Anda dapat meminta
units
untuk mengonversi MiB / GiB / KiB menjadi hanya "B" dan itu akan menangani ini, tetapi Anda harus melakukan sesuatu seperti (dengan asumsi output Anda tab, jika tidakcut
tepat)sumber
units
hilang pada distro minimal saya! Saya pikir kita semua akan melakukan ini secara berbeda jika kita memiliki kendali penuh atas segalanya.sumber