我正在学习如何在unix shell中创建脚本。我有一个基因组坐标列表,我想将其作为值传递给命令行。例如,我有文件Chr1.txt
:
Chr1 10 450
Chr1 456 890
...
shell命令是:
maf_parse --start *value1* --end *value2*
我想使用$2
的开头($3
)和结束(Chr1.txt
)坐标迭代运行shell命令。我有~1000个条目。
答案 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 3
和3< 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(标准输入)作为输入文件描述符。这使得程序能够在需要时读取标准输入。