【问题标题】:Run shell program on multiple input files [duplicate]在多个输入文件上运行shell程序[重复]
【发布时间】:2015-12-19 00:39:26
【问题描述】:

如何设置命令行程序来运行文件夹中的所有输入文件? 假设我的输入文件的名称如下所示,并且在_.txt 之间的部分有所不同:

IsomiR_377G.txt,
IsomiR_377R.txt,
IsomiR_379G.txt,
....

我的任何程序都被命名为bowtie,并且有两个选项inputoutput

bowtie -i IsomiR_377G.txt -o IsomiR_377G.sam

正在考虑类似的事情:

for f in IsomiR_*.txt
do
    bowtie -i "$f"  -o "Output${f#IsomiR}" 
done

我的 awk 函数也有类似的问题:

for f in IsomiR_*.txt 
do 
awk '{printf ">%s_%s\n %s\n",$1,$2,$1;}' "$f" > "Header${f#IsomiR}" 
done

-bash: syntax error near unexpected token `>'

【问题讨论】:

  • 在写你的问题时请小心。您使用了多种开关(-q/-s-i/-o)并显示了与您列出的文件不同的命令示例。列表中第一个文件的确切命令是什么?看来您在 bash 的字符串操作方面处于正确的位置;你到底卡在哪里了?
  • 已更新。它看起来正确吗?也许只是打字错误..
  • 好的,您已经更改了开关以使其匹配。文件名呢?你如何从IsomiR_377G.txtinput1.txt
  • 您在 awk 代码中遇到的问题似乎完全不相关 - 我建议您删除它并专注于使您的原始问题更清晰。

标签: bash shell


【解决方案1】:

假设你有这三个输入文件:

IsomiR_377G.txt
IsomiR_377R.txt
IsomiR_379G.txt

并想运行相应的命令:

bowtie -i IsomiR_377G.txt -o output377G.sam
bowtie -i IsomiR_377R.txt -o output377R.sam
bowtie -i IsomiR_379G.txt -o output379G.sam

那么您可以使用类似于您问题中的循环:

for f in IsomiR_*.txt; do 
    base_name=${f%.txt}
    id=${base_name#*_}
    bowtie -i "$f" -o "output${id}.sam"
done

这会删除.txt 后缀以及导致第一个_ 的所有内容,以获取用于输出文件名的ID。

【讨论】:

    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    相关资源
    最近更新 更多