订购输出文件

时间:2014-03-31 12:59:38

标签: regex unix file-io awk

我有一个包含大量蛋白质序列的文件。每个序列由最初的“蛋白质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

有谁知道如何在输出文件中获取GI列表以匹配与我在第一个regex字段中输入的GI列表相同的顺序?

1 个答案:

答案 0 :(得分: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开始,并在同一位置结束。