Chinaunix

标题: 请问如何对多个文件执行相同的命令 [打印本页]

作者: chenjiali1    时间: 2011-07-06 14:36
标题: 请问如何对多个文件执行相同的命令
我对文件的处理命令行是这样的:
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命令实现对每个文件执行上面的命令行。我不知道$怎么用?谢谢大家!
作者: yinyuemi    时间: 2011-07-06 15:03
回复 1# 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
复制代码

作者: chenjiali1    时间: 2011-07-06 15:12
回复 2# 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”来获取更多信息。
作者: yinyuemi    时间: 2011-07-06 15:18
回复  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
作者: chenjiali1    时间: 2011-07-06 15:26
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;
作者: ly5066113    时间: 2011-07-06 15:28
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 一起做掉
作者: chenjiali1    时间: 2011-07-06 15:32
回复 6# ly5066113


    谢谢,这些命令倒是无所谓的,因为生成的每个文件我后面都用的到,所以我这样写的,f1,f2后面还都用的着的。我主要是想知道怎么对多个文件执行相同的操作。望指教!
作者: yinyuemi    时间: 2011-07-06 15:34
回复 5# chenjiali1


    你的sh脚本第7行是那句代码?
   感觉是perl脚本读取文件出错了
作者: chenjiali1    时间: 2011-07-06 15:41
回复 8# 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
作者: yinyuemi    时间: 2011-07-06 15:48
回复 9# chenjiali1


    你的文件名中包含'/'么?
   贴一下ls *.out 看下
作者: chenjiali1    时间: 2011-07-06 15:54
Lo-in.out  Lo-la.out
作者: ly5066113    时间: 2011-07-06 16:00
回复 10# yinyuemi


$filename_f1
应该要改成:
${filename}_f1
_ 是变量名的一部分
作者: yinyuemi    时间: 2011-07-06 16:08
本帖最后由 yinyuemi 于 2011-07-06 16:10 编辑

回复 11# chenjiali1

所有的$filename改成"$filename"

或用ls Tim的方法
作者: chenjiali1    时间: 2011-07-06 16:28
Lo-in.out  Lo-la.out
作者: chenjiali1    时间: 2011-07-06 16:32
可以啦,,谢谢两位,对$还是不是很了解,




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2