2014-03-31 131 views
0

我有一个包含大量蛋白质序列的文件。每个序列由一个最初的“蛋白质ID号码”(对于那些知道的GI号码)开头。我正在使用awk命令,允许我在两个正则表达式之间打印。使用这个,我可以在一个正则表达式字段中输入一个GI编号列表,其中每个GI编号用“|”分隔。第二个正则表达式是我在每个蛋白质后添加的正则表达式,允许我执行awk函数(ABC123)。 所以我使用的代码如下订购输出文件

awk '/GI1|GI2|GI3|GI4|GIX.../,/ABC123/' database.txt > output.txt 

正如你可以从上面的代码中所看到的,我database.txt内搜索并写入新文件。问题是,当我打开output.txt时,GI的列表是错误的顺序。在output.txt的,我需要他们,因为他们出现在第一场正则表达式,即

GI1 
GI2 
GI3... 

相反,它们发生在它们在database.txt出现的顺序,所以在output.txt中出现的相同顺序它们看起来都如混乱

Gi3 
GI4 
GI1 
GI2 
GI5 

有谁知道我如何能得到地理标志的名单在输出文件相匹配的相同顺序大兵我输入的在第一场正则表达式列表?

+0

我认为它们并不总是和'sort'产生的顺序一样,如果你做了'sort

+0

如在output.txt之前添加'sort'?像'... database.txt> sort output.txt' – user3473083

+0

这将是'awk'....'database.txt | sort> output.txt' –

回答

1

试试这个命令,

awk '/GI1|GI2|GI3|GI4|GIX.../,/ABC123/' database.txt | sort -k1.3,1.3 > output.txt 

现在你output.txt中包含排序列表。

规范1.3,1.3指出排序键必须从字段1的位置3开始,并在相同的地方结束。

+1

正如我在对主要问题的评论中指出的那样,这样做的麻烦是'sort'一次只能在一行上工作,但数据是以多行的形式出现的(在以GI1开头的行和例如,开始“ABC123”的行)。 –