每行将字节转换为GB

时间:2019-06-20 15:04:46

标签: bash awk sed

如何在Bash的单列中的每一行中将字节转换为GB? 我已经尝试过了:

echo "scale=2; $(cat file.log) / 1024^2" | bc

但是只能转换最后一个值。

file.log内容示例:

   2171863040
   1693491200
   1984045056

(之间没有空格)

3 个答案:

答案 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