循环用于在bash文件中读取多个查询

时间:2017-04-01 17:02:18

标签: linux bash loops while-loop

我需要在Bash脚本(analysis-run.sh)中使用循环来运行许多查询。由于我有很多疑问,我无法手动运行它们,所以我需要一种方法来自动化它们。到目前为止,我创建了一个包含所有查询的文件inputs.txt,并在bash脚本文件的末尾添加了以下内容:

while read f ; do
  ./analysis-run.sh $f 
done < imputs.txt

使用该循环,analyze-run只会反复运行inputs.txt的第一个查询。我真的很陌生,所以任何帮助都会受到赞赏。

imputs.txt的内容是:

肌肉

血液

唾液

依旧......

analysis-run.sh的内容是:

以./analysis-run.sh [query] [group]

执行此脚本

查询= $ 1

组= $ 16

如果[$ group =&#34; clean&#34; ]。然后

    cluster=A

否则

    cluster=B

网络连接

adamo-obtain_bundance.py - 查询$ query -ref combined_ $ cluster。$ group.align -splits 1 -group $ group

adamo-obtain_structure.py -i $ query.combined_ $ query $ group.csv -o $ query。$ group -cutoff 0.5 -group $ group

2 个答案:

答案 0 :(得分:0)

在Bash中使用循环有时可以工作,但它会带来危险。

使用xargs通常是最干净,最强大的方法......

<inputs.txt xargs --max-args=1 do_something

要执行的命令可以作为Bash函数提供......

function do_something
   {
   echo value=${1}
   }

虽然采用这种方法时对xargs的调用更为复杂。请参阅:Calling functions with xargs within a bash script

关于xargs

xargs获取一个参数列表(通常是文件名),它们作为输入文件或流提供,并将这些参数放在命令行中,用于另一个指定的命令或函数。如果该命令可以处理多个输入参数,则可以删除--max-args=1选项。

答案 1 :(得分:0)

使用该循环,analysis-run只是一遍又一遍地运行inputs.txt的第一个查询。

问题(可能)是您需要引用$f

while read -r f ; do
  ./analysis-run.sh "$f" 
done < samples.txt

如果没有引号,从samples.txt读取的行将受到分词和全局扩展的影响。

阅读http://tldp.org/LDP/abs/html/quotingvar.html

然后通过ShellCheck

运行您的脚本