我正在尝试使用通过以下方式运行的 java 脚本/软件:
java -jar picard.jar MergeSamFiles \
I=input_1.bam \
I=input_2.bam \
O=output_merged_files.bam
其中 I=
表示程序的输入。我有一个文本文件,其中包含我想输入到该程序中的输入,例如:
arg1
arg2
arg3
...
其中每一行都被转换为 I=arg1 I=arg2 I=arg3 ...
。有没有一种简单的方法可以在 bash 中做到这一点?
答案 0 :(得分:2)
我建议使用数组:
# read file.txt to array
mapfile -t array < file.txt
# prefix every array element with "I="
java -jar picard.jar MergeSamFiles \
"${array[@]/#/I=}" \
O=output_merged_files.bam
答案 1 :(得分:1)
简单的bash
:
java -jar picard.jar MergeSamFiles \
$(IFS=$'\n'; printf "I=%s " $(<inputfile)) \
O=output_merged_files.bam
或者替代
java -jar picard.jar MergeSamFiles \
$(while read -r; do echo "I=$REPLY"; done < inputfile) \
O=output_merged_files.bam
或使用 sed
:
java -jar picard.jar MergeSamFiles \
$(sed 's/^/I=/' inputfile) \
O=output_merged_files.bam
答案 2 :(得分:0)
我认为这样的事情可能会奏效:
java -jar picard.jar MergeSamFiles $(sed -E 's/^/I=/' make_it_so.txt | xargs) O=output_merged_files.bam
如果您的输入文件中的 args 多于 xargs 可以展平的数量,则您可能会遇到上述问题。