LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5576|回复: 16

出道算术题[精彩回复]

[复制链接]
发表于 2004-3-17 00:22:37 | 显示全部楼层 |阅读模式
有文件file
a  100
g  200
o  300
g  400
a  500
a  600
o  760
如果第一域相同,那么计算他们的和, 即:
  1. /home/javalee:awk '{sum[$1]+=$2}END{for (i in sum)print i,sum[i]}' file
  2. a 1200
  3. o 1060
  4. g 600
复制代码
除了用awk,还有其他的方法么? ...:ask
发表于 2004-3-17 08:50:48 | 显示全部楼层
perl 肯定是可以的了,回去我用 bash 试试
发表于 2004-3-17 12:44:27 | 显示全部楼层
最初由 dearvoid 发表
perl 肯定是可以的了,回去我用 bash 试试


  1. #! /usr/bin/perl -w

  2. if(defined($_=shift @ARGV)) {
  3.     open INPUTFILE, "$_"
  4.         or die "Cannot access file $_($!)";
  5. # Read file and process
  6.     while (<INPUTFILE>) {
  7.         chomp;
  8.         if(/^(\w+)\s+(\d+)$/){
  9.             if (exists $hashdb{$1}){
  10.                 $hashdb{$1}+=$2;
  11.             }
  12.             else{
  13.                 $hashdb{$1}=$2;
  14.             }
  15.         }
  16.     }
  17.     foreach $field (sort keys %hashdb){
  18.         print "$field has $hashdb{$field}\n";
  19.     }
  20.     close INPUTFILE;
  21. }
  22. else{
  23.     print "No argument is supplied!\n";
  24. }
复制代码

正好借这道题练习一下散列,呵呵~~
 楼主| 发表于 2004-3-17 13:10:43 | 显示全部楼层
I use bc:
  1. #把文件的第一列数据取出并去掉重复的作为循环的索引
  2. #在循环体里,用$i这个索引来取出对应的数数字并用bc
  3. #来把这些数字相加
  4. for i in $(sort txt|cut -f1 -d" "|uniq);do
  5.         echo -n "$i:";echo $(sort txt|grep "\<$i\>"|tr -d 'a-z '|tr '\n' '+')0|bc
  6. done
复制代码
发表于 2004-3-17 13:28:24 | 显示全部楼层
最初由 javalee 发表
I use bc:

  1. for i in $(sort txt|cut -f1 -d" "|uniq);do
  2.         echo -n "$i:";echo $(sort txt|grep "\<$i\>"|tr -d 'a-z '|tr '\n' '+')0|bc
  3. done
复制代码

好复杂哦,javalee大哥解释一下吧。
发表于 2004-3-17 17:41:39 | 显示全部楼层
最初由 javalee 发表
倩儿的perl脚本写的很棒!

:thank,刚骑过"小骆驼",练习而已~~
最近还在图书馆借来了"大骆驼",呵呵。

另外,我觉得javalee大哥你的脚本写得很精炼,可见大哥深厚的shell编程功力。
不过,你给出的bc脚本似乎有点局限性。假如txt文件的格式并非完全严格地如楼顶格式,比如加入了第三域以及注释,那大哥的脚本就会出错。
姑且提点意见,这算是程序强壮性的概念吗,大哥指教。
 楼主| 发表于 2004-3-17 20:12:08 | 显示全部楼层
最初由 倩儿 发表
:thank,刚骑过"小骆驼",练习而已~~
最近还在图书馆借来了"大骆驼",呵呵。

另外,我觉得javalee大哥你的脚本写得很精炼,可见大哥深厚的shell编程功力。
不过,你给出的bc脚本似乎有点局限性。假如txt文件的格式并非完全严格地如楼顶格式,比如加入了第三域以及注释,那大哥的脚本就会出错。
姑且提点意见,这算是程序强壮性的概念吗,大哥指教。

你客气了~,具体情况具体分析,shell的灵活性即在于此!
发表于 2004-3-17 21:33:46 | 显示全部楼层
嗯,我觉得perl的伟大之处还在于,它使编写c一样强大的语言像编写shell code一样简单快捷。
 楼主| 发表于 2004-3-19 21:34:29 | 显示全部楼层
难道就没有别的方法了么?! :ask
发表于 2004-3-20 00:10:16 | 显示全部楼层
第一次看到女孩子如此厉害!!!

我也开始学shell programming了...

今天出去买了本Bruee Blinn写的Unix Shell Programming入门...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表