我的文件包含KB
和MB
中的值。如何在for
循环中计算MB
和KB
中以MB为单位的值的总和?
对于MB,这给了我价值,然后我需要总结那些:
cat usage_1.12.2015_31.12.2015.xls.csv | grep MB | awk -F '"' '{print $4}' | awk '{print $1}'
输出:
17
16
13
17
14
3
3
12
10
8
6
10
KB
student@student-vm:~/Downloads$ cat usage1.12.2015_31.12.2015.xls.csv | grep KB
"2015/12/28 14:15:46","109 KB",,0
"2015/12/28 14:13:47","331 KB",,0
"2015/12/21 11:01:34","762 KB",,0
"2015/12/20 19:51:40","253 KB",,0
"2015/12/07 07:18:50","81 KB",,0
"2015/12/03 14:56:06","407 KB",,0
MB
student@student-vm:~/Downloads$ cat usage1.12.2015_31.12.2015.xls.csv | grep MB
"2015/12/06 15:54:47","10 MB",,0
"2015/12/06 09:43:02","4 MB",,0
"2015/12/05 21:39:04","21 MB",,0
"2015/12/05 09:17:11","18 MB",,0
"2015/12/04 21:57:49","70 MB",,0
"2015/12/04 17:09:45","1 MB",,0
"2015/12/04 16:47:05","17 MB",,0
答案 0 :(得分:1)
我建议在这里使用awk:
awk -F'"?,"?' '{ split($2, a, / /); if (a[2] == "KB") a[1] /= 1000; sum += a[1] }
END { print sum }' file
-F
开关用于在逗号上分割输入,可选择用引号括起来。将空格$2
上的第二个字段/ /
拆分为数组a
。如果第二部分a[1]
为a[2]
,则将第一部分KB
(数字)除以1000。累积值的总和,一旦文件完全处理完毕,就在END
块中打印该值。
答案 1 :(得分:0)
首先获取列值,以便您只有1 MB
,50 KB
等行,然后您可以执行此类操作来获取字节数:
用空字符串替换空格(使用sed
表示法):
s/ //
将兆字节转换为千字节(如果使用ISO单位,则添加三个零,*1024KB
并将步骤3的结果通过bc
发送,如果它是kibibytes;您也可以执行此操作GB,TB等。):
s/MB/000KB/
将千字节转换为字节:
s/KB/000/
将字节转换为兆字节:
bc <<< "${sum} / 1000000"