免费注册 查看新帖 |

Chinaunix

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

【求助】程序调用shell命令问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-15 11:12 |只看该作者 |倒序浏览
我的问题是:
文件1和文件2,文件1中为ID号,文件2为包含ID号的记录,现在我要统计,文件1中的相应ID在文件2中出现的次数,我的程序请见后面,但程序运行时,调用的系统shell命令一行没有执行,请高手指点一下问题在哪里?非常感谢!
文件1

  1. ID-1183
  2. ID-1200
  3. ID-1202
  4. ID-1205
  5. ID-1234
  6. ID-1246
  7. ID-1249
  8. ID-1254
  9. ID-1255a
  10. ID-1255b-1
  11. ID-1255b-2
  12. ID-1256
  13. ID-1257
  14. ID-1261
  15. ID-1263
  16. ID-1264
  17. ID-1266
  18. ID-1267
  19. ID-1268
  20. ID-1269
  21. ID-1271
  22. ID-1273
  23. ID-1274a
  24. ID-1274b
  25. ID-1277
  26. ID-1281
  27. ID-1285-1
  28. ID-1285-2
  29. ID-1289-1
  30. ID-1289-2
  31. ID-1290
  32. ID-1293
  33. ID-1299
  34. ID-1302-1
  35. ID-1302-2
  36. ID-1302-3
  37. ID-1302-4
  38. ID-1302-5
  39. ID-1302-6
  40. ID-1302-7
  41. ID-1302-8
  42. ID-1303
  43. ID-1304
  44. ID-1308
  45. ID-132
  46. ID-1321
  47. ID-151
  48. ID-153-1
  49. ID-1825
  50. ID-1908
复制代码


文件2

  1. Group A        ID-30a*        product        5        41977146        41977169                16.616        4.429530e-03       
  2. Group A        ID-1290        product        5        41977234        41977254                15.4135        2.801450e-02       
  3. Group A        ID-380*        product        5        41977199        41977221                15.3042        4.179390e-02       
  4. Group A        ID-1183        product        5        41977568        41977589                15.9601        3.969860e-04       
  5. Group A        ID-545        product        5        41977192        41977213                15.9601        1.234960e-02       
  6. Group A        ID-1185        product        5        41977216        41977236                16.7009        2.377100e-03       
  7. Group A        ID-500        product        5        41977511        41977535                15.4477        9.852240e-03       
  8. Group A        ID-518a-5p        product        5        41977224        41977243                15.4653        9.508890e-05       
  9. Group A        ID-1825        product        5        41977449        41977470                15.9318        4.710340e-02       
  10. Group A        ID-1825        product        5        41977567        41977589                16.9439        1.148810e-03       
  11. Group A        ID-124*        product        5        41977185        41977207                16.616        2.194290e-02       
  12. Group A        ID-626        product        5        41977245        41977265                16.8866        6.654730e-05       
  13. Group A        ID-1908        product        5        41977482        41977508                15.5931        6.578880e-03       
  14. Group A        ID-449b        product        5        41977567        41977589                17.4905        1.148810e-03       
  15. Group A        ID-590-5p        product        5        41977230        41977251                18.2557        1.393580e-04       
  16. Group A        ID-132        product        5        41977203        41977225                16.9439        4.156810e-03       
  17. Group A        ID-151        product        5        41977529        41977549                15.4923        2.142750e-04       
  18. Group A        ID-501-3p        product        5        41977517        41977538                15.0856        1.050870e-02       
  19. Group A        ID-362-5p        product        5        41977509        41977534                16.1346        1.903460e-03       
  20. Group A        ID-450a        product        5        41977479        41977500                14.8669        5.374130e-04       
  21. Group A        ID-1302        product        5        41977220        41977240                16.1515        5.766300e-04       
  22. Group A        ID-1299        product        5        41977567        41977589                16.862        3.969860e-04       
  23. Group A        ID-30d*        product        5        41977146        41977169                16.1787        4.429530e-03       
  24. Group A        ID-138-2*        product        5        41977478        41977496                16.5067        2.314470e-02       
  25. Group A        ID-515-5p        product        5        41977241        41977263                17.6765        1.265860e-02       
  26. Group A        ID-1304        product        5        41977322        41977343                16.2596        4.195950e-02       
  27. Group A        ID-1305        product        5        41977305        41977323                16.6889        3.843640e-02       
  28. Group A        ID-198        product        5        41977241        41977262                16.6007        4.350710e-02       
  29. Group A        ID-140-5p        product        5        41977151        41977174                16.6007        3.128820e-02       
  30. Group A        ID-499-3p        product        5        41977180        41977201                16.3733        2.895430e-02       
  31. Group A        ID-1273        product        5        41977241        41977261                17.4891        2.755170e-03       
  32. Group A        ID-132        product        5        41977158        41977178                16.0031        2.755170e-03       
  33. Group A        ID-513-3p        product        5        41977160        41977182                16.9697        3.442170e-02       
  34. Group A        ID-522        product        5        41977154        41977175                17.1692        2.505200e-02       
  35. Group A        ID-669c        product        5        41977244        41977267                16.7144        3.371550e-02       
  36. Group A        ID-30a*        product        5        41977146        41977169                17.2829        2.350300e-02       
  37. Group A        ID-517*        product        5        41977242        41977262                16.2596        3.346050e-02       
  38. Group A        ID-1256        product        5        41977199        41977221                15.9185        2.161210e-02       
  39. Group A        ID-1290        product        5        41977216        41977236                17.3748        2.943950e-02       
  40. Group A        ID-1267        product        5        41977192        41977213                16.6007        4.354040e-02       
  41. Group A        ID-1261        product        5        41977185        41977207                17.2829        1.090920e-02       
  42. Group A        ID-1273        product        5        41977245        41977265                17.5759        9.338500e-03       
  43. Group A        ID-590-5p        product        5        41977230        41977251                18.9884        2.086540e-03       
  44. Group A        ID-1257        product        5        41977203        41977225                17.624        1.404200e-02       
  45. Group A        ID-1268        product        5        41977220        41977240                16.8033        3.813450e-02       
  46. Group A        ID-30d*        product        5        41977146        41977169                16.8281        3.853030e-02       
  47. Group A        ID-1308        product        5        41970691        41970713                17.3803        1.913760e-03       
  48. Group A        ID-377        product        5        41970399        41970419                15.8285        1.913760e-03       
复制代码


  1. #!/usr/bin/perl -w
  2. use strict;
  3. my $fileone=$ARGV[0];
  4. my $filetwo=$ARGV[1];
  5. print $fileone;
  6. my (@id,@res);
  7. my $result;
  8. open (FH,$fileone);
  9. while(<FH>){
  10. push (@id,$_);

  11. #print "$_\t$result\n";
  12. }
  13. close FH;
  14. foreach my $name(@id){
  15. print $name,"\n";
  16. system"grep -c $name $filetwo";
  17. }
复制代码

[ 本帖最后由 bmechuangye 于 2009-9-15 11:17 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-09-15 11:38 |只看该作者

回复 #1 bmechuangye 的帖子

perl 本身就有grep命令。还很强大。

论坛徽章:
0
3 [报告]
发表于 2009-09-15 11:40 |只看该作者
执行起来速度很慢,

#!/usr/bin/perl -w
use strict;
my $fileone=$ARGV[0];
my $filetwo=$ARGV[1];
print $fileone;
my (@id,@res);
my $result;
open (FH,$fileone);
while(<FH>){
    chomp;             # 别忘记去掉行尾的回车
push (@id,$_);

#print "$_\t$result\n";
}
close FH;
foreach my $name(@id){
print $name;
@res = `grep -c $name $filetwo`;         # system是shell返回值,不是返回结果。最好是把文件保存到内存,然后用perl中的grep 去查询,用shell好像慢了点
print "\n@res\n";
}

论坛徽章:
0
4 [报告]
发表于 2009-09-15 14:14 |只看该作者

回复 #3 dahe_1984 的帖子

当然慢啊
文件整个保存到数组,让后又从数组里一个一个取出来,还调用外部命令。
前面两步本来就是重复工作。如果文件再大一点点,跑都不用跑了,在这个地方就要挂掉。

论坛徽章:
0
5 [报告]
发表于 2009-09-15 22:30 |只看该作者
原帖由 dahe_1984 于 2009-9-15 11:40 发表
执行起来速度很慢,

#!/usr/bin/perl -w
use strict;
my $fileone=$ARGV[0];
my $filetwo=$ARGV[1];
print $fileone;
my (@id,@res);
my $result;
open (FH,$fileone);
while(){
    chomp;        ...


非常感谢!

论坛徽章:
0
6 [报告]
发表于 2009-09-15 22:34 |只看该作者
原帖由 toniz 于 2009-9-15 11:38 发表
perl 本身就有grep命令。还很强大。


那么应该怎么优化呢?我试了试,没成功。

论坛徽章:
0
7 [报告]
发表于 2009-09-16 10:05 |只看该作者

回复 #6 bmechuangye 的帖子

#!/usr/bin/perl

use strict;
die("usage: $0 <fileone><filetwo> \n") if ($#ARGV != 1);


my ($fileone,$filetwo) = @ARGV;
my $result = 0;
open (FH1,$fileone)or die "NoFile: $fileone.$!";
open (FH2,$filetwo)or die "NoFile: $filetwo.$!";
while(my $temp = <FH1>){
$temp=~ s/\s+//ig;
seek (FH2,0,0);
$result = $result + grep {/$temp/i} <FH2>;
}

print $result;


[ 本帖最后由 toniz 于 2009-9-16 16:44 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-09-17 10:43 |只看该作者

回复 #7 toniz 的帖子

不用chomp吗?
还有
但颜色的代码怎么发?

论坛徽章:
0
9 [报告]
发表于 2009-09-17 10:59 |只看该作者
结果貌似不对哦
结果是2文件还有19个1文件里包含的元素
而不是次数

论坛徽章:
0
10 [报告]
发表于 2009-09-17 11:12 |只看该作者
原帖由 toniz 于 2009-9-16 10:05 发表
#!/usr/bin/perl

use strict;
die("usage: $0  \n") if ($#ARGV != 1);


my ($fileone,$filetwo) = @ARGV;
my $result = 0;
open (FH1,$fileone)or die "NoFile: $fileone.$!";
open (FH2,$filetwo) ...

不行啊,狂占内存,2分多钟还没运行完我就终止它了。而三楼的0m15.765s
就运行完了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP