我有一个如下组织的长列表(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
这对于非强迫性读者来说是非常复杂的尝试和解析。难道你不能做一个20字符的2行输入,让人们很容易看到问题并帮助你解决吗?此外,我认为展示输入和输出使得问题解决更自然。祝你好运。 – shellter
感谢您的建议,编辑已经作出 – gugy
您的问题再次使用'{}'按钮来格式化您的输入和输出,就像您的代码一样。 –