分页: 1 / 1

关于awk的替换计算

发表于 : 2009-11-12 11:37
mushroom09
能不能帮我看下这段代码有什么错误?

数据格式如下:

A:4K
A:2M
A:2K


有问题代码如下:
BEGIN { FS = ":"; totalm=0 }
/A:/{
if ( gsub( /K$/,"",$2) ) totalm=totalm + $2/1024;
else
if ( gsub( /M$/,"",$2 ) totalm=totalm + $2;
}
总是报totalm=totalm + $2这地方有语法错误

Re: 关于awk的替换计算

发表于 : 2009-11-12 12:25
blue sea
$3? 变量能是纯数字吗?

Re: 关于awk的替换计算

发表于 : 2009-11-12 13:32
mushroom09
拜求大牛现身指教 :em06

或者有什么好的方法可以计算:(用awk解决)
A:1K
A:2M
A:4M
A:3K
.
.
.
对A求和结果如下
total A = ?M

Re: 关于awk的替换计算

发表于 : 2009-11-12 13:33
mushroom09
blue sea 写了:$3? 变量能是纯数字吗?
。。。。。

Re: 关于awk的替换计算

发表于 : 2009-11-12 16:51
yingfei
嗯, 你那行少了一个右括号, 鉴定完毕。

Re: 关于awk的替换计算

发表于 : 2009-11-16 21:10
yaohoo
BEGIN { FS = ":"; totalm=0 }
/A:/{
if ( gsub( /K$/,"",$2) totalm=totalm + $2/1024;
else
if ( gsub( /M$/,"",$2 ) totalm=totalm + $2;
}

把括号去掉.

Re: 关于awk的替换计算

发表于 : 2009-11-18 2:07
aerofox
另一个做法:

代码: 全选

BEGIN { FS = ":"; totalm=0 }
$2 ~ /K$/ {totalm=totalm + $2/1024; }
$2 ~ /M$/ {totalm=totalm + $2;}
END {print totalm}

Re: 关于awk的替换计算

发表于 : 2009-11-18 9:22
eexpress
复杂点的运算,就去用perl吧。
不同软件,用途不同的

Re: 关于awk的替换计算

发表于 : 2009-11-18 11:32
Stupid kid

代码: 全选

#!/usr/bin/perl -w

use strict;

my $total;
while (<>) {
	chomp;
	$_ = $1 / 1024 if /(\d+)k$/i;
	$_ = $1 if /(\d+)m$/i;
	$total += $_;
}

print "$total" . "M\n";

Re: 关于awk的替换计算

发表于 : 2009-11-18 12:10
xiooli

代码: 全选

#!/usr/bin/env python
# -*- coding: utf-8 -*-
F = lambda x:( x.endswith("K") and float(x.replace("K",""))/1024 ) or float(x.replace("M",""))
with open("./data","r") as f:
    l = f.readlines()
    L = [ F(i.split(":")[1].strip()) for i in l ]
print str(sum(L)) + " M"