如何在 Bash 中单列的每一行中将字节转换为千兆字节?我已经尝试过这个:
echo "scale=2; $(cat file.log) / 1024^2" | bc
Run Code Online (Sandbox Code Playgroud)
但只转换最后一个值。
file.log 内容示例:
2171863040
1693491200
1984045056
Run Code Online (Sandbox Code Playgroud)
(之间没有空格)
你可以使用awk:
$ cat file.log
1073741824 1073741824
$ awk '{print $1/1024/1024/1024 " GB " $2/1024/1024/1024 " GB"}' file.log
1 GB 1 GB
Run Code Online (Sandbox Code Playgroud)
或使用您刚刚发布的示例数据:
$ awk '{print $1/1024/1024/1024 " GB "}' file.log
2.02271 GB
1.57719 GB
1.84779 GB
Run Code Online (Sandbox Code Playgroud)
awk会更快 -
awk '{ printf "%.2f\n", $1/1024/1024/1024; }' file.log
Run Code Online (Sandbox Code Playgroud)
但bc需要一个循环。
while read b
do bc <<< "scale=2; $b / 1024^3" # shouldn't GB be ^3?
done < file.log
Run Code Online (Sandbox Code Playgroud)
两者产量
2.02
1.58
1.85
Run Code Online (Sandbox Code Playgroud)
新的赞成票让我再次审视这一点。其他地方的评论不准确,但有道理。
我正在转换为gibi字节(2 的幂),而不是giga字节(10 的幂)。我认为这就是我们想要的,因为技术上普遍存在错误的用法。
如果 OP 实际上意味着他们想要 10 的幂而不是 2,只需将 1024 切换为 1000 -
awk '{for (i = 1; i <= NF; i++) $i = ($i/(1000*1000*1000)); print }' file.log
Run Code Online (Sandbox Code Playgroud)
...虽然我怀疑他们的意思,但最好是清晰、具体和准确。