将文本文件行作为参数传递给脚本输入?

时间:2021-02-10 19:43:09

标签: bash

我正在尝试使用通过以下方式运行的 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 中做到这一点?

3 个答案:

答案 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 可以展平的数量,则您可能会遇到上述问题。