2016-12-28 89 views
0

我是新来的,还有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 b,c dd e,并将它们变为Trimmomatic的变量。如何在命令中提取文本并在bash脚本中用作输入

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

+0

你不能打电话给你的“另一程序”环路内? – codeforester

+0

@Giang Le:你能不能把更多的信息放进你的文章中,比如样本输入和预期输出,我们很容易就能帮助你。 – RavinderSingh13

+0

样本输入是来自不同运行的成对最终fastq文件,程序是Trimmomatic。我正在尝试创建一个脚本来读取对端文件的名称,并按照输入文件的顺序运行它们。 –

回答

0

你可以用一个read呼叫填写更多增值经销商:

while read -r sample param1 param2; do 
    echo "Sample ${sample}" 
    echo "Calling Trimmomatic ${param1} ${param2}" 
    trimmomatic "${param1}" "${param2}" 
done < "${in_put}" 
+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]}""${elems[$idx + 1]}"idx = 0,2,4,...。

相关问题