2016-08-23 47 views
0

我有一個如下組織的長列表(INPUT)。 我想分割數據,以便我得到如下輸出(所需的OUTPUT)。unix使用循環,awk和拆分拆分FASTA

下面的代碼首先標識包含「> gi」的所有行,並將這些行的行數保存在一個名爲B的數組中。 然後,在新文件中,應該用數組B中的行縮短版本之後的文字

我認爲最簡單的方法是在「|」處分割,但這不起作用(如果我用「|」替換「」,我的代碼不會發生分離)

我的代碼在下面,在「」之後很好地分割「」,通過「」在INPUT,但是我遇到麻煩時,我想要得到的[]括號內的文字,這並不總是存在,而且並不總是隻有2個字...:

B=$(grep -n ">gi" 1VAO_1DII_5fxe_all_hits_combined.txt | cut -d : -f 1) 

awk <1VAO_1DII_5fxe_all_hits_combined.txt >seqIDs_1VAO_1DII_5fxe_all_hits_combined.txt -v lines="$B" ' 
BEGIN {split(lines, a, " "); for (i in a) change[a[i]]=1} 
NR in change {$0 = ">" $4} 
1 
' 

讓我知道如果需要更多解釋!

INPUT:

>gi|9955361|pdb|1E0Y|A:1-560 Chain A, Structure Of The D170sT457E DOUBLE MUTANT OF VANILLYL- Alcohol Oxidase 
MSKTQEFRPLTLPPKLSLSDFNEFIQDIIRIVGSENVEVISSKDQIVDGSYMKPTHTHDPHHVMDQDYFLASAIVA 

>gi|557721169|dbj|GAD99964.1|:1-560 hypothetical protein NECHADRAFT_63237 [Byssochlamys spectabilis No. 5] 
MSETMEFRPMVLPPNLLLSEFNGFIRETIRLVGCENVEVISSKDQIHDGSYMDPRHTHDPHHIMEQDYFLASAIVAPRNV 

期望的輸出:

>1E0Y 
MSKTQEFRPLTLPPKLSLSDFNEFIQDIIRIVGSENVEVISSKDQIVDGSYMKPTHTHDPHHVMDQDYFLASAIVAPRNV 

>GAD99964.1 Byssochlamys spectabilis No. 5 
MSETMEFRPMVLPPNLLLSEFNGFIRETIRLVGCENVEVISSKDQIHDGSYMDPRHTHDPHHIMEQDYFLASAIVA 
+2

這對於非強迫性讀者來說是非常複雜的嘗試和解析。難道你不能做一個20字符的2行輸入,讓人們很容易看到問題並幫助你解決嗎?此外,我認爲展示輸入和輸出使得問題解決更自然。祝你好運。 – shellter

+0

感謝您的建議,編輯已經作出 – gugy

+1

您的問題再次使用'{}'按鈕來格式化您的輸入和輸出,就像您的代碼一樣。 –

回答

2

這可以在一個步驟中與AWK來完成(GNU AWK):

awk -F'|' '/^>gi/{a=1;match($NF,/\[([^]]*)]/, b);print ">"$4" "b[1];next}a{print}!$0{a=0}' input > output 

在一個更可讀的方式:

/^>gi/ { # when the line starts with ">gi" 
    a=1; # set flag "a" to 1 
    # extract the eventual part between brackets in the last field 
    match($NF,"\\[([^]]*)]", b); 
    print ">"$4" "b[1]; # display the line 
    next # jump to the next record 
} 

a { print } # when "a" (allowed block) display the line 

!$0 { a=0 } # when the line is empty, set "a" to 0 to stop the display 
+0

這給了我只有>字符後跟一個空行。我確實需要「|」之間的第四個元素和[]括號之間的位。我不明白match()行會發生什麼。 – gugy

+0

好的。現在很清楚比賽會發生什麼。是否可以修改打印命令以便不僅僅打印行的第4個元素,而是實際使用「|」分隔符打印行的第4個元素? – gugy

+0

沒關係,忽略之前的評論......我自己感到困惑。它起作用。 Thx – gugy