关于awk的替换计算

sh/bash/dash/ksh/zsh等Shell脚本
回复
mushroom09
帖子: 16
注册时间: 2009-08-13 16:57

关于awk的替换计算

#1

帖子 mushroom09 » 2009-11-12 11:37

能不能帮我看下这段代码有什么错误?

数据格式如下:

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这地方有语法错误
上次由 mushroom09 在 2009-11-12 13:34,总共编辑 1 次。
blue sea
帖子: 198
注册时间: 2007-11-10 8:57

Re: 关于awk的替换计算

#2

帖子 blue sea » 2009-11-12 12:25

$3? 变量能是纯数字吗?
mushroom09
帖子: 16
注册时间: 2009-08-13 16:57

Re: 关于awk的替换计算

#3

帖子 mushroom09 » 2009-11-12 13:32

拜求大牛现身指教 :em06

或者有什么好的方法可以计算:(用awk解决)
A:1K
A:2M
A:4M
A:3K
.
.
.
对A求和结果如下
total A = ?M
mushroom09
帖子: 16
注册时间: 2009-08-13 16:57

Re: 关于awk的替换计算

#4

帖子 mushroom09 » 2009-11-12 13:33

blue sea 写了:$3? 变量能是纯数字吗?
。。。。。
头像
yingfei
帖子: 273
注册时间: 2007-09-03 18:34
来自: 羊城通

Re: 关于awk的替换计算

#5

帖子 yingfei » 2009-11-12 16:51

嗯, 你那行少了一个右括号, 鉴定完毕。
yaohoo
帖子: 14
注册时间: 2009-11-09 8:44

Re: 关于awk的替换计算

#6

帖子 yaohoo » 2009-11-16 21:10

BEGIN { FS = ":"; totalm=0 }
/A:/{
if ( gsub( /K$/,"",$2) totalm=totalm + $2/1024;
else
if ( gsub( /M$/,"",$2 ) totalm=totalm + $2;
}

把括号去掉.
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 关于awk的替换计算

#7

帖子 aerofox » 2009-11-18 2:07

另一个做法:

代码: 全选

BEGIN { FS = ":"; totalm=0 }
$2 ~ /K$/ {totalm=totalm + $2/1024; }
$2 ~ /M$/ {totalm=totalm + $2;}
END {print totalm}
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 关于awk的替换计算

#8

帖子 eexpress » 2009-11-18 9:22

复杂点的运算,就去用perl吧。
不同软件,用途不同的
● 鸣学
头像
Stupid kid
帖子: 416
注册时间: 2006-10-18 12:57

Re: 关于awk的替换计算

#9

帖子 Stupid kid » 2009-11-18 11:32

代码: 全选

#!/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";
http://twitter.com/nothining
Mail: [email protected]
南京的开源活动几乎是0,希望能有人组织下(也可以拉我入伙^_^)
最近在从零开始学习Linux程序设计,加油……
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 关于awk的替换计算

#10

帖子 xiooli » 2009-11-18 12:10

代码: 全选

#!/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"
回复