如何将文件中的值传递给shell命令中的参数?

时间:2015-03-09 23:05:37

标签: shell

我正在学习如何在unix shell中创建脚本。我有一个基因组坐标列表,我想将其作为值传递给命令行。例如,我有文件Chr1.txt

Chr1   10    450
Chr1   456   890
...

shell命令是:

maf_parse  --start *value1*   --end *value2*

我想使用$2的开头($3)和结束(Chr1.txt)坐标迭代运行shell命令。我有~1000个条目。

1 个答案:

答案 0 :(得分:2)

while read chr1 start end
do
    maf_parse --start "$start" --end "$end"
done < Chr1.txt

将每行读入三个变量;运行命令。如果您愿意,可以使用read -r,但不一定要使用您显示的数据。

  

我最后不理解< Chr1.txt。这是否意味着“从中读”?

它是输入重定向,与其他任何地方一样,除了它将输入重定向到整个while read ...; do ...; done循环。如果程序maf_parse可能从标准输入读取,则需要使用不同的重定向 - 请参阅下面的示例。

  

此外,假设我有一个带有名称的第四个字段($ 4),并希望将每个迭代的结果保存在一个名称为的文件中;我怎么能修改你的剧本?

假设您有Bash,您可以执行读取重定向,如图所示(read -u 33< Chr1.txt)。其余部分在类似Bourne的贝壳之间保持中立。

while read -u 3 chr1 start end file junk
do
    maf_parse --start "$start" --end "$end" > "$file"
done 3< Chr1.txt

3的意思是使用文件描述符3而不是0(标准输入)作为输入文件描述符。这使得程序能够在需要时读取标准输入。