如何按顺序提取文本并在bash脚本中用作输入

时间:2016-12-28 18:07:30

标签: linux bash shell

我是新手以及bash脚本。是否可以创建一个脚本来提取文本,以便用作另一个程序的输入 我的输入文件($ in_put)采用这种格式。样品是来自不同测序运行的对端文件:
    sample_1 a b
    sample_2 c d
    sample_3 e f
我试图使用的程序是Trimmomatic。我尝试了范围,因为这是我在bash中知道的唯一可以按顺序运行的循环。这就是我做的:
smpl_no=3
test_val=$(for (( b=1; b<=$smpl_no; b++)); do grep ple_$b $in_put | awk '{print $2, $3}'; done)
但是,在我使用echo $test_val查看的位置,它会将a b c d e f全部放在一起。我想将对中的值提取为a bc dd e,并将它们转换为Trimmomatic的变量。

将来我也有更多样本作为输入。解决这个问题的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

我没有使用Trimmomatic,但基于this doc page,我认为您需要将每个af列为单独的参数,对吗?

smpl_no=3
elems=()   # make an array
for(( b=0; b<$smpl_no; ++b)); do   # arrays start at 0

   read -r _ elem1 elem2 < <(grep ple_$b $in_put)
       # Get, e.g., "a" and "b" into $elem1 and $elem2
   elems+=("$elem1" "$elem2")
       # Save them in an array

done

java -jar trimmomatic-0.35.jar PE -phred33 "${elems[@]}" ILLUMINACLIP ... <whatever else>
    # each element as a separate parameter ^^^^^^^^^^^^^

如果您只需要配对,则"${elems[$idx]}" = 0,2,4 ......的每一对都可以为"${elems[$idx + 1]}"idx

答案 1 :(得分:0)

您可以通过一次read来填充更多变量:

while read -r sample param1 param2; do
   echo "Sample ${sample}"
   echo "Calling Trimmomatic ${param1} ${param2}"
   trimmomatic "${param1}" "${param2}"
done < "${in_put}"