2016-12-28 88 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,...。

相關問題