如何在输入之间的变量数发生变化时自动生成脚本路径的输入



我有一个变量.txt文件,其中包含如下变量名称列表:

Target  Location    Control_A   Control_B   Control_C   
Sample_A    City    Bos_1   Bos_2   Bos_3
Sample_B    Countryside Rno_1   Rno2
Sample_C    City    Cat_1   

我需要使用这些详细信息来创建命令列表,我可以将这些命令提交给脚本,该脚本使用这些变量名称作为以下格式的信息:

./script.sh -target /path/to/Target -location /path/to/Location -controls /path/to/Control_A,/path/to/Control_B,/path/to/Control_C -outdir /path/to/outdir

通常我会在终端中定义我的变量,例如:

Path_to_data="/home/user/data/"
Target="Sample_A"
Control_A="Rno_1"
Control_B="Rno_2"

然后我会提交带有变量名称的命令,例如:

./script.sh -target /$Path_to_data/"$Target"_data/"$Target -Location /$Path_to_data/$Location -controls /$Path_to_data/$Control_A,/$Path_to_data/$Control_B

问题是现在我有>100 个工作要提交,所以这种方法不可行。

我想要一个脚本或循环来读取变量.txt文件,并为每一行输出一行到一个新的输出.txt文件中,其中每一行都是 ./script.sh 的完整命令输入

一个关键问题是我不知道如何自动化它,因为控件的数量因样本而异。所以我不能简单地将列Control_A、Control_B和Control_C指定为变量,并将它们及其路径打印为 ./script.sh 输入的 -controls 部分的逗号分隔值,因为有时只有一两个控件取决于变量.txt文件中的行。

输出.txt如下所示:

./script.sh -target /home/user/data/SampleA_data/Sample_A -Location /home/user/data/City -controls /home/user/data/Bos_1,/home/user/data/Bos_2,/home/user/data/Bos_3
./script.sh -target /home/user/data/SampleB_data/Sample_B -Location /home/user/data/Countryside -controls /home/user/data/Rno_1,/home/user/data/Rno2
./script.sh -target /home/user/data/SampleC_data/Sample_C -Location /home/user/data/City -controls /home/user/data/Cat_1

提前感谢任何帮助。

#!/bin/bash
prefix=/home/user/data/
while read -r target location ctrla ctrlb ctrlc; do
[ -n "$ctrlb" ] && ctrlb=",${prefix}${ctrlb}"
[ -n "$ctrlc" ] && ctrlc=",${prefix}${ctrlc}"
printf './script.sh -target %s -Location %s -controls %sn'
"${prefix}${target}"
"${prefix}${location}"
"${prefix}${ctrla}${ctrlb}${ctrlc}"
done < <(tail -n+2 variables.txt) > output.txt

我假设TargetLocationControl_A总是设置好的。只有Control_BControl_C是可选的。

tail -n+2用于跳过variables.txt的标题行。您的示例target输出看起来有点不同(.../SampleA_data/Sample_A(,我不是您想要的。根据需要更改此部分。

示例输出:

$ cat output.txt
./script.sh -target /home/user/data/Sample_A -Location /home/user/data/City -controls /home/user/data/Bos_1,/home/user/data/Bos_2,/home/user/data/Bos_3
./script.sh -target /home/user/data/Sample_B -Location /home/user/data/Countryside -controls /home/user/data/Rno_1,/home/user/data/Rno2
./script.sh -target /home/user/data/Sample_C -Location /home/user/data/City -controls /home/user/data/Cat_1

相关内容

最新更新