Text-Processing

如何按第三列中的數字對數據進行排序?

  • February 4, 2016

如果我有一個包含如下數據的文件,我將如何根據第 3 列中的數字對數據進行排序?前兩列之間的空格不是製表符分隔的,而是一些空格。第二列和第三列之間的間距因數字的大小而異。另請注意,第二列的某些數據中有空格(例如lp25( plasmidbetween (and 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

試試這個:

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 列。

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製表符還是空格?

引用自:https://unix.stackexchange.com/questions/259713