2016-08-23 48 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