如何在awk中添加值

时间:2016-09-12 18:25:02

标签: awk sh

我的文件有日志大小,

10.80 kb
60.08 kb
35.40 kb 
2.20 MB
1.10 MB
40.80 kb
3.15 MB
20.50 kb

我想以满足以下条件的方式添加awk one liner,

  1. 将kb转换为MB(除以1000)
  2. 获得以MB为单位的总数
  3. 我写了下面的awk代码,但无法添加MB,

    awk '{FS=" "} if ($2 ~ 'kb'){total += ($1/1000)}END{print total}'
    

    这会将kb转换为MB并提供总数,但不会向其添加MB值。请指教?

3 个答案:

答案 0 :(得分:4)

尝试:

if

如何运作

对于每一行,执行if ($2=="kb") total+=$1/1000; else total+=$1 语句:

kb

如果第二个字段为awk ' { if ($2=="kb") total+=$1/1000 else total+=$1 } END{ print total }' file ,则总数增加第一个字段除以1,000。否则,它会被第一个字段增加。

代码读完文件后,将打印总数。

多行版本

对于那些喜欢将代码分散在多行中的人:

{{1}}

答案 1 :(得分:4)

使用三元运算符:

$ awk '{total+= $1 / ($2=="kb" ? 1000: 1)}END{print total}' file
6.61758

<强>解释

运算符语法

expr ? action1 : action2

在这个例子中:

$2=="kb" ? 1000: 1

根据第二个字段值(expr),我们的程序将执行不同的操作,在这种情况下,它返回1000action1)或{{1}的数值(1)。

此时action2变量用于累加total值除以三元运算符给出的结果。

$1

检查this

答案 2 :(得分:1)

“kb”(真的是KB)到MB的转换是kB除以1024.在下面的kb和kB假定为kB:

$ awk '$2 ~ /k[bB]/ {$1/=1024} {sum+=$1} END {print "sum:" sum}' foo
sum:6.61365