免费注册 查看新帖 |

Chinaunix

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

求助:perl 调用linux系统命令问题~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-17 11:04 |只看该作者 |倒序浏览
我在linux系统下面运行命令: macs14 -t CD4-H3K9ac.bed -f BED -g hs --bw 200 -n test
(这里面macs14是一个软件,CD4-H3K9ac.bed为处理得文件名,其他全部是相应参数)
但是,每运行一次,只能执行一个文件。我手上现在有CD4-H3K9ac.bed ,CD4-H3K8ac.bed ,CD4-H3K7ac.bed ,.....
等等类似的文件,都放在同一目录下,我想些一个perl脚本,将这些文件都一次加到linux命令中,这样我只要运行perl一次,就能把所有文件都处理完。
求解答~~
能给我per代码吗~
谢谢各位~~~

论坛徽章:
0
2 [报告]
发表于 2011-10-17 11:14 |只看该作者
glob operator

论坛徽章:
0
3 [报告]
发表于 2011-10-17 11:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2011-10-17 14:25 |只看该作者
本帖最后由 linghu002127 于 2011-10-17 14:39 编辑

谢谢各位,已经解决~~
step1:读取文件列表并存入text文件

  1. #!/usr/bin/perl

  2. use warnings;
  3. use strict;
  4. my $dir ='D:\data\tem2';
  5. my $file;
  6. opendir (DIR, $dir);
  7. my @dir = readdir DIR;
  8. open(SAVEOUT,">&STDOUT");
  9. open(STDOUT,"+>test.txt");

  10. foreach $file (@dir) {
  11.     if ( $file =~ /[A-Z]*\.bed/) {
  12.         print $file,"\t";
  13.         }
  14. }

  15. open(STDOUT,">&SAVEOUT"); #记得最后恢复STDOUT
  16. closedir(DIR);
  17. close STDOUT;
  18. close SAVEOUT;
复制代码
step2:调用system命令
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;
  4. my $file;
  5. my @files= qw /CD4-H3K8ac.bed CD4-H3K9ac.bed CD4-H3K10ac.bed  /;  #这个地方若改为qw /test.txt /不行
  6. foreach $file (@files){
  7. print $file;
  8. system ("macs14 -t $file -f BED -g hs --bw 200 --llocal 5000 -n test-$file");
  9. }
复制代码
然后就解决了。

但是就qw那句若改为qw /test.txt /这个命令时,得不到想要的文件名,只能得到test.txt ,不知何故,所以我干脆将文件列在qw/ /之间得了~~
现在还没有解决,但是问题太初级,所以继续赶小骆驼吧~~,以后可能会明白的。

论坛徽章:
0
5 [报告]
发表于 2011-10-23 10:41 |只看该作者
foreach(glob(CD4-*.bed)) { system($_);}

论坛徽章:
0
6 [报告]
发表于 2011-10-23 10:41 |只看该作者
foreach(glob(CD4-*.bed)) { system($_);}

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
7 [报告]
发表于 2011-10-23 11:25 |只看该作者
回复 4# linghu002127


Windows系统?试试这个:
  1. @echo off
  2. for %%a in ("*.bed") do (
  3.     macs14 -t %%a -f BED -g hs --bw 200 -n test
  4. )
复制代码

论坛徽章:
0
8 [报告]
发表于 2011-10-23 22:27 |只看该作者
回复 6# nhw_cs


    谢谢你的帮助~~
     已经解决了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP