Конвертировать байты в ГБ в каждой строке - PullRequest
0 голосов
/ 20 июня 2019

Как я могу преобразовать байты в гигабайты в каждой строке в одном столбце в Bash?Я пробовал это:

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

, но конвертирует только последнее значение.

Пример содержимого file.log:

   2171863040
   1693491200
   1984045056

(без пробелов между)

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Если вы хотите пересчитать каждое поле (через пробел) в строке.

Этот скрипт awk сделает всю работу.

awk '{for (i = 1; i <= NF; i++) $i = ($i/(1024*1024*1024)); print }' file.log
1 голос
/ 20 июня 2019

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
1 голос
/ 20 июня 2019

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...