如何在Bash的单列中的每一行中将字节转换为GB? 我已经尝试过了:
echo "scale=2; $(cat file.log) / 1024^2" | bc
但是只能转换最后一个值。
file.log内容示例:
2171863040
1693491200
1984045056
(之间没有空格)
答案 0 :(得分:1)
您可以使用awk
:
$ cat file.log
1073741824 1073741824
$ awk '{print $1/1024/1024/1024 " GB " $2/1024/1024/1024 " GB"}' file.log
1 GB 1 GB
或使用您刚发布的示例数据:
$ awk '{print $1/1024/1024/1024 " GB "}' file.log
2.02271 GB
1.57719 GB
1.84779 GB
答案 1 :(得分:1)
如果要重新计算一行中的每个字段(以空格分隔)。
此awk
脚本将完成工作。
awk '{for (i = 1; i <= NF; i++) $i = ($i/(1024*1024*1024)); print }' file.log
答案 2 :(得分:1)
awk
会更快-
awk '{ printf "%.2f\n", $1/1024/1024/1024; }' file.log
但是bc
需要循环。
while read b
do bc <<< "scale=2; $b / 1024^3" # shouldn't GB be ^3?
done < file.log
两者都产量
2.02
1.58
1.85