我是新手以及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 d
和d e
,并将它们转换为Trimmomatic的变量。
将来我也有更多样本作为输入。解决这个问题的最佳方式是什么?
答案 0 :(得分:0)
我没有使用Trimmomatic,但基于this doc page,我认为您需要将每个a
到f
列为单独的参数,对吗?
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}"