免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3397 | 回复: 6
打印 上一主题 下一主题

[数值计算] 关于shell变量运算的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-15 23:01 |只看该作者 |倒序浏览
今天实在是给shell整得要哭了,完全一团糟,都不知道咋写了。,一直觉得shell非常好用,但今天变量需要进行数学运算是,突然感到非常的麻烦,想吐仇一下,顺便请教一下各位大大

例如:
数据:这里的位置由参数w和n决定
    第w列    第w+1列  。。。 。。。 。。第w+n列
- - -   1         2       3       4        5 - - -
- - -   2         3       4       5        6 - - -
- - -   3         4       5       6        7 - - -

希望输出$w*k[1]+$(w+1)*k[2]......+$(w+n)*k[n]   注:这里的k也是关于n的数组  

现在整成这个不对的模样,实在半死,头脑混乱,请各位大大指教

k=(k1 k2 k3...kn)  
w=×× 
for((i=0;i<$w;i++))
do
j=`echo "$w+$i"|bc`;   
awk -v k=${k[i]} -v j=$j '{total+=$j*k}END{print total}' f3.txt  
done

还有各种诡异的写法,真的整毛了,混沉沉,实在坑爹
awk '{total=0;for(i='"$ws"';i<'"$we"';i++){total+=$i*'"$m"i""';print '"$m"i""'};print total}    '

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
2 [报告]
发表于 2013-10-15 23:07 |只看该作者
建议好好看书,这个语法问题

论坛徽章:
0
3 [报告]
发表于 2013-10-15 23:17 |只看该作者
嗯,基本功不扎实,还有就是逐行读入处理会容易一些,awk整得头晕,坑爹呀回复 2# liion631818


   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
4 [报告]
发表于 2013-10-15 23:20 |只看该作者
回复 1# fangww_uestc

    感觉SHELL也被你整哭了 ,没看明白你的意思,
    建议列出示例数据,然后给出你想要的结果,并说明规则.....

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
5 [报告]
发表于 2013-10-16 00:14 |只看该作者
本帖最后由 klainogn 于 2013-10-16 20:48 编辑

k="k1 k2 k3...kn"
w=2 
n=`echo "$k" | awk '{print NF}'`
echo $k >k_array
awk -v w=$w -v n=$n 'NR==FNR{for(i=0;i<NF;i++)k=$(i+1);next}{for(i=0;i<n;i++) value+=$(w+i)*k;print value}' k_array f3.txt
rm -rf k_array

定义数组k=[1 2 3 4 5], 其长度为n

数据:这里的位置由参数w和n决定
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7 8

$w*k[0]+$(w+1)*k[1]......+$(w+n)*k[n]
2*1+3*2+4*3+5*4+6*5=70
3*1+4*2+5*3+6*4+7*5=155
4*1+5*2+6*3+7*4+8*5+255

论坛徽章:
0
6 [报告]
发表于 2013-10-16 00:33 |只看该作者
回复 4# 关阴月飞
生命在于折腾 ,跟shell干上了
逐行就是这种写法

for($i=0;$i<2;$i++)
{
 $m=101;
      for($j=0;$j<$c{$m};$j++)
          {
           $k+=$arr[$s{$m}+$j]*$e[$j];
          }
 }

数据,也就是arr数组
arr[1]: 1   2  3  4  5  6
arr[2]: 7   8  9 10 11 12
arr[3]: 13 14 15 16 17 18

e=(1001 1002 1003)
arr[1]中c{$101}=2,arr[2]中c{101}=1,arr[3]中c{101}=3
arr[1]中s{$101}=2,arr[1]中s{$101}=2,arr[3]中s{$101}=1

得到:
2×1001+3×1002
8×1001
13×1001+14×1002+15×1003

论坛徽章:
0
7 [报告]
发表于 2013-10-16 00:52 |只看该作者
回复 5# klainogn
谢谢你,不过实在有点晕


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP