![](/img/trans.png)
[英]HAL - UDISKS, human readable, convert bytes to gigabytes in bash script
[英]Convert number to gigabytes (sed, awk, sh, bash)
我有以下多行輸出:
Volume Name: GATE02-SYSTEM
Size: 151934468096
Volume Name: GATE02-S
Size: 2000112582656
是否可以像這樣轉換字符串:
Volume Name: GATE02-SYSTEM
Size: 141.5 Gb
Volume Name: GATE02-S
Size: 1862.75 Gb
與sed / awk? 我為唯一的數字輸出尋找答案,例如:
echo "151934468096" | awk '{ byte =$1 /1024/1024**2 ; print byte " GB" }'
但無法弄清楚如何將其應用於我的案子。
編輯:我想澄清我的情況。 我有以下一線:
esxcfg-info | grep -A 17 "\\==+Vm FileSystem" | grep -B 15 "[I]s Accessible.*true" | grep -B 4 -A 11 "Head Extent.*ATA.*$" | sed -r 's/[.]{2,}/: /g;s/^ {12}//g;s/\|----//g' | egrep -i "([V]olume Name|^[S]ize:)"
上面產生輸出。 我想知道在最后一個命令之后添加更多內容以獲得所需的輸出。
printf "Volume Name: GATE02-SYSTEM\nSize: 151934468096\nVolume Name: GATE02-S\nSize: 2000112582656" |
awk '/^Size: / { $2 = $2/1024/1024**2 " Gb" }1'
使用(GNU) sed
和bc
:
... | sed 's@Size: \([0-9]*\)@printf "Size: %s" $(echo "scale = 2; \1 / 1024 ^ 3" | bc)GiB@e'
^^^^ ^^^^^^^^^^ ^^^^^^ ^^^^^^^^^ ^^ ^^^^^^^^^^ ^^ ^
1 2 3 4 5 6 7 8
Size:
線。 printf
輸出 scale =
設置bc
的小數位數 sed
捕獲組(字節數) bc
進行評估 sed
在子外殼中執行s
語句的“替換”部分。 另一個選擇是numfmt
(自GNU coreutils 8.21起可用):
... | sed 's@Size: \([0-9]*\)@printf "%s" $(echo \1 | numfmt --to=iec-i --suffix=B)@e'
這不能讓您控制小數,但是可以對所有大小進行“操作”(即,給TiB提供足夠大的數字,而對於太小的數字則不能截斷為“ 0.00 GiB”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.