+ -
当前位置:首页 → 问答吧 → 请问如何对多个文件执行相同的命令

请问如何对多个文件执行相同的命令

时间:2011-07-06

来源:互联网

我对文件的处理命令行是这样的:
cat 11.out|grep "^gi">11_oute-5
cat 11_oute-5|cut -f1>11_f1
cat 11_oute-5|cut -f2>11_f2
perl ../x4.pl 11_f1 ../inverginame

我现在有几十个文件,分别叫11,12,13.。。。。。请问如何用bash命令实现对每个文件执行上面的命令行。我不知道$怎么用?谢谢大家!

作者: chenjiali1   发布时间: 2011-07-06

回复 chenjiali1


    这个?
  1. for filename in `ls *.out`
  2. do
  3. cat $filename|grep "^gi">$filenamee-5
  4. cat $filenamee-5|cut -f1>$filename_f1
  5. cat $filenamee-5|cut -f2>$filename_f2
  6. perl ../x4.pl $filename_f1 ../inverginame
  7. done
复制代码

作者: yinyuemi   发布时间: 2011-07-06

回复 yinyuemi


    我试了一下,好像不行哦。
提示是这样的。
11.sh: 6: cannot create : Directory nonexistent
cat:无效选项 -- 5
请尝试执行“cat --help”来获取更多信息。
11.sh: 6: cannot create : Directory nonexistent
cat:无效选项 -- 5
请尝试执行“cat --help”来获取更多信息。
11.sh: 6: cannot create : Directory nonexistent
cat:无效选项 -- 5
请尝试执行“cat --help”来获取更多信息。
11.sh: 6: cannot create : Directory nonexistent
cat:无效选项 -- 5
请尝试执行“cat --help”来获取更多信息。

作者: chenjiali1   发布时间: 2011-07-06



QUOTE:
回复  yinyuemi


    我试了一下,好像不行哦。
提示是这样的。
11.sh: 6: cannot create : Directo ...
chenjiali1 发表于 2011-07-06 15:12



这样呢?
        for filename in `ls *.out`
    do
    grep "^gi" $filename >$filename_gi
    cut -f1 < $filename_gi>$filename_f1
    cut -f2 < $filename_gi>$filename_f2
    perl ../x4.pl $filename_f1 ../inverginame
    done

作者: yinyuemi   发布时间: 2011-07-06

11.sh: 7: cannot create : Directory nonexistent
11.sh: 7: cannot open : No such file
11.sh: 7: cannot open : No such file
这次提示是这样的,是不是我有什么环境变量没定义好啊,我看我同学的程序写的和这个差不多,可以跑,我的怎么就不行呢?
他有个sh是这样的
for a in 'cat name';
do cd $a;
perl x4.pl;
cd ../;
done;

作者: chenjiali1   发布时间: 2011-07-06

cat 11.out|grep "^gi">11_oute-5
cat 11_oute-5|cut -f1>11_f1
cat 11_oute-5|cut -f2>11_f2
这3句用1句 awk 就可以完成:
awk '/^gi/{print $1>"11_f1";print $2>"11_f2"}' 11.out

x4.pl 不知道是什么内容,应该都可以合到 awk 一起做掉

作者: ly5066113   发布时间: 2011-07-06

回复 ly5066113


    谢谢,这些命令倒是无所谓的,因为生成的每个文件我后面都用的到,所以我这样写的,f1,f2后面还都用的着的。我主要是想知道怎么对多个文件执行相同的操作。望指教!

作者: chenjiali1   发布时间: 2011-07-06

回复 chenjiali1


    你的sh脚本第7行是那句代码?
   感觉是perl脚本读取文件出错了

作者: yinyuemi   发布时间: 2011-07-06

回复 yinyuemi


    第7行是done,我把前面的行去掉的话,每次出问题都是提示在done哪一行,咋回事呢?
这样输的话
for filename in `ls *.out`
    do
    grep "^gi" $filename >$filename_gi
    done
提示就是这样的
11.sh: 4: cannot create : Directory nonexistent
11.sh: 4: cannot create : Directory nonexistent

作者: chenjiali1   发布时间: 2011-07-06

回复 chenjiali1


    你的文件名中包含'/'么?
   贴一下ls *.out 看下

作者: yinyuemi   发布时间: 2011-07-06