Bash 将每行中的字节转换为GB

Bash 将每行中的字节转换为GB,bash,awk,sed,Bash,Awk,Sed,在Bash中,如何将单行中的字节转换为千兆字节? 我试过这个: echo "scale=2; $(cat file.log) / 1024^2" | bc 但这只能转换最后一个值 file.log内容的示例: 2171863040 1693491200 1984045056 (之间没有空格)您可以使用awk: $ cat file.log 1073741824 1073741824 $ awk '{print $1/1024/1024/1024 " GB " $2/102

在Bash中,如何将单行中的字节转换为千兆字节? 我试过这个:

echo "scale=2; $(cat file.log) / 1024^2" | bc
但这只能转换最后一个值

file.log内容的示例:

   2171863040
   1693491200
   1984045056

(之间没有空格)

您可以使用
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

如果要重新计算行中的每个字段(以空格分隔)

这个
awk
脚本将完成这项工作

awk '{for (i = 1; i <= NF; i++) $i = ($i/(1024*1024*1024)); print }' file.log

awk'{for(i=1;i
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

您能否提供
file.log
?请将样本输入和该样本输入的所需输出添加到您的问题中…并且您所需的输出所需的输出是同一列,但以GB为单位。不要只告诉我们它-显示您希望从您的问题中发布的样本输入中获得的实际输出。当OP需要时,您正在转换为MiB做国标。
2.02
1.58
1.85