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