分页: 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
拜求大牛现身指教
或者有什么好的方法可以计算:(用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"