如何按第三列中的数字对数据进行排序?

如何按第三列中的数字对数据进行排序?

如果我有一个由如下所示的数据组成的文件,我将如何根据第三列中的数字对数据进行排序?前两列之间的空格不是制表符分隔的,而是一些空格。第二列和第三列之间的间距根据数字的大小而变化。另请注意,第二列的某些数据中有空格(如和lp25( plasmid之间),而其他数据则没有任何空格(如)。(pchromosome

HELIX       lp25(plasmid           24437 bp    RNA     linear       29-AUG-2011
HELIX       cp9(plasmid             9586 bp    DNA     helix       29-AUG-2011
HELIX       lp28-1(plasmid         25455 bp    DNA     linear       29-AUG-2011
HELIX       chromosome            911724 bp    DNA     plasmid       29-AUG-2011

答案1

尝试这个:

sort -n --k3 <file>

例如:

$ sort -n -k3 test
HELIX       cp9(plasmid             9586 bp    DNA     helix       29-AUG-2011
HELIX       lp25(plasmid           24437 bp    RNA     linear       29-AUG-2011
HELIX       lp28-1(plasmid         25455 bp    DNA     linear       29-AUG-2011
HELIX       chromosome            911724 bp    DNA     plasmid       29-AUG-2011

-n按数值排序,并-k3选择第 3 列。

答案2

sed $'s/\t/ /g' my_file | tr -s " " | sort -t" " -k 3 

第一个sed命令将所有制表符替换为单个空格。 tr -s " "表示将多个连续的空白字符压缩为一个space字符。

如果需要数字排序,可以使用

sed $'s/\t/ /g' my_file | tr -s " " | sort -t" " -n -k 3 

当然,这并没有解决第二列的不规则性,我只是注意到了。因此进行编辑。在这种情况下我有一个问题。在下面的行中,

HELIX       lp28-1(plasmid         25455 bp    DNA     linear       29-AUG-2011
        ^                     ^
        1                     2

这些是分隔符12制表符还是空格?

相关内容