将文件的每一行保存到不同的变量中,并在命令行输入和输出中一一使用每个变量

将文件的每一行保存到不同的变量中,并在命令行输入和输出中一一使用每个变量

我对 shell 脚本很陌生,所以如果之前有人问过这个问题,我深表歉意。

我有一个像这样的文件坐标.txt:

765442
866447
755343
097754

我想将文件每一行的每个值传递给一个变量,并逐一使用这些值作为命令行中的输入,并将该数字保存在文件名的一部分中。我编写了以下代码,但不确定这是否是正确的方法......

cat coordinates.txt | while read LINE; do
    var="$(echo $LINE)"
    /home/users/scripts/TreeView/TreeView.sh -o $NAME_ALL.chr1.new_estimate.trees.$var --bp_of_interest $var
done

因此,在输出 -o 中,每个值一次附加一个到文件名,并且每个值也用作 --bp_of_interest,一次一个

任何建议都将受到高度赞赏。谢谢

答案1

你的循环最好写成

PATH=/home/users/scripts/TreeView:$PATH

while IFS= read -r line; do
    TreeView.sh -o "$name_all.chr1.new_estimate.trees.$line" --bp_of_interest "$line"
done <coordinates.txt

这会改变以下内容:

  • 我加到/home/users/scripts/TreeView前面了$PATH。这使我们可以TreeView.sh在不添加绝对路径的情况下进行调用。
  • 我删除了该var变量,因为它与从输入文件读取的值相同。
  • 我使用是IFS= read -r line因为“理解“IFS=读取-r行””。
  • 我使用小写变量名是因为“shell 脚本中的变量有命名约定吗?”。
  • 我通过重定向将文件中的数据传递到循环中,因为cat在本例中不需要使用。

做同样事情的另一种方法:

PATH=/home/users/scripts/TreeView:$PATH

xargs -I {} TreeView.sh -o "$name_all.chr1.new_estimate.trees.{}" --bp_of_interest "{}" <coordinates.txt

这用于xargs将从 的每一行读取的数据插入coordinates.txt到脚本参数TreeView.sh中由 表示的位置{}

您甚至可以添加-P nxargs命令行(例如 before -I {},其中n是某个数字)以一次运行脚本的多个并行实例,每个实例都将适当的数据插入到其命令行中coordinates.txt

相关内容