當前位置:
首頁 > 知識 > numfmt : 讓數字變得更容易理解

numfmt : 讓數字變得更容易理解

(點擊

上方公眾號

,可快速關注)




來源:暗無天日 ,


lujun9972.github.io/blog/2018/05/09/numfmt-讓數字變得更容易理解/




像 ls, df, du 這類命令都帶有一個選項可以將數字直接轉換成人類容易閱讀的形式來展現。 比如,直接執行 df 時,容量顯示的是多少個塊,而當用 df -h 時,容量會根據塊的數量轉換成G/M/K的形式。





[lujun9972@T520 ~]$ df


文件系統          1K-塊     已用     可用 已用% 掛載點


dev             1900280        0  1900280    0% /dev


run             1906932      868  1906064    1% /run


/dev/sda2      41022688 23631300 15277852   61% /


tmpfs           1906932    26204  1880728    2% /dev/shm


tmpfs           1906932        0  1906932    0% /sys/fs/cgroup


tmpfs           1906932     5156  1901776    1% /tmp


/dev/sda3      73005440 61682676  7571272   90% /home


tmpfs               100        0      100    0% /var/lib/lxd/shmounts


tmpfs               100        0      100    0% /var/lib/lxd/devlxd


tmpfs            381384        8   381376    1% /run/user/1000





[lujun9972@T520 ~]$ df -h


文件系統        容量  已用  可用 已用% 掛載點


dev             1.9G     0  1.9G    0% /dev


run             1.9G  868K  1.9G    1% /run


/dev/sda2        40G   23G   15G   61% /


tmpfs           1.9G   26M  1.8G    2% /dev/shm


tmpfs           1.9G     0  1.9G    0% /sys/fs/cgroup


tmpfs           1.9G  5.1M  1.9G    1% /tmp


/dev/sda3        70G   59G  7.3G   90% /home


tmpfs           100K     0  100K    0% /var/lib/lxd/shmounts


tmpfs           100K     0  100K    0% /var/lib/lxd/devlxd


tmpfs           373M  8.0K  373M    1% /run/user/1000



不過對於那些沒有這類功能的命令該怎麼辦呢?有單獨的一個命令來實現數字和易讀形式之間的轉換嗎? 答案是,還真有,這就是 numfmt. 而且 numfmt 是coreutils的一部分,無需另行安裝,真是良心。




1000進位還是1024進位?這是個問題




使用 numfmt 支持兩種轉換標準,一種是 1K=1000,1M=1000K…的:




numfmt –to=si 數字

將數字轉換成易讀格式





numfmt --to=si 100000





100K



numfmt –from=si 易讀格式




將易讀格式轉換成數字





numfmt --from=si 100K





100000




還有一種是 1K=1024,1M=1024K…的:




numfmt –to=iec 數字


將數字轉換成易讀格式





numfmt --to=iec 100000





98K




numfmt –from=iec 易讀格式




將易讀格式轉換成數字





numfmt --from=iec 100K





102400




事實上,還有一種格式是 1Ki=1024,1Mi=1024Ki…的(即在單位後面有個i):




numfmt –to=iec-i 數字


將數字轉換成易讀格式





numfmt --to=iec-i 100000





98Ki




numfmt –from=iec-i 易讀格式




將易讀格式轉換成數字





numfmt --from=iec-i 100Ki




當將易讀格式轉換會數字時,可以將格式設置為 auto, 這樣 numfmt 會自動判斷應該是按1000來轉換還是按1024來轉換,其選擇的規則為:




- 若格式的單位後面不帶 i 則使用1000進位來轉換





numfmt --from=auto 100K





100000




- 若格式的單位後面不帶 i 則使用1024進位來轉換





numfmt --from=auto 100Ki





102400




一次進行多個轉換




numfmt 能夠一次性進行多個轉換,只需要在後面羅列數字或者易讀格式就行了。





numfmt --to=iec 100000 20000 40000





98K


20K


40K





numfmt  --from=iec 98K 20K 40K





100352


20480


40960




從中你也可以看出,轉換的結果其實並不會特別的精確




指定數字的單位




使用 --from-unit 可以指定輸入數字的單位,比如:





numfmt --to=si --from-unit K 1000





1.0M




你會發現,輸出是 1M 而不是 1K




同理,使用 --to-unit 可以指定輸出數字的單位:





numfmt --from=si --to-unit K 1M





1000




可以看到,輸出是是 1000 而不是 1000000




指定輸出的格式




使用 --format 可以指定輸出的格式,其格式語法類似於C語言中 printf 的格式說明,但僅限于格式化一個浮點數。比如:




輸出右對齊,佔10位字元





[lujun9972@T520 ~]$ numfmt --to=si --format "%10f" 1000


      1.0K




輸出左對齊,佔10位字元





[lujun9972@T520 ~]$ numfmt --to=si --format "%-10f|" 1000


1.0K      |




為了清晰,我在字元串最後加了一個 |




輸出右對齊,佔10位字元,不夠的位用0填充





[lujun9972@T520 ~]$ numfmt --to=si --format "%010f" 1000


00000001.0K




與其他命令整合




當 numfmt 沒有指定數字或易讀格式來轉換時,它會從stdin中讀取要轉換的內容





echo 1000 |numfmt --to=si





1.0K




然而,對於像 df 這樣的命令,除了數字外,還有其他內容怎麼辦呢?




這個時候,我們可以使用 --header 來跳過命令輸出前面幾行的標題,使用 field 來指定轉換某幾列的內容。




比如,我們可以用下列命令來讓 numfmt 只轉換 df 命令從第3行開始的2到4列數字,保持其他內容不變





df -B1 | numfmt --header=2 --field 2-4 --to=iec




看完本文有收穫?請轉發分享給更多人


關注「ImportNew」,提升Java技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

MySQL 下 perror 工具查看 System Error Code 信息
通向架構師的道路(第二十四天)之 Oracle 性能調優

TAG:ImportNew |