我的文件有日志大小,
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,
我写了下面的awk代码,但无法添加MB,
awk '{FS=" "} if ($2 ~ 'kb'){total += ($1/1000)}END{print total}'
这会将kb转换为MB并提供总数,但不会向其添加MB值。请指教?
答案 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
),我们的程序将执行不同的操作,在这种情况下,它返回1000
(action1
)或{{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