我有一个变量.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
我假设Target
、Location
和Control_A
总是设置好的。只有Control_B
和Control_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