3番目の列の数字でデータをソートする方法は? [コピー]

3番目の列の数字でデータをソートする方法は? [コピー]

次のデータで構成されるファイルがある場合は、3番目の列の数字に基づいてデータをどのように並べ替えますか?最初の2つの列の間のスペースはタブ区切りではなく、いくつかのスペースです。 2番目の列と3番目の列の間の間隔は、数字のサイズによって異なります。また、2 番目の列の一部のデータには空白が含まれていますが(および間)、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数字で並べ替えて-k33列を選択します。

答え2

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

最初のsedコマンドは、すべてのタブ文字を単一のスペースに置き換えます。 tr -s " "複数の連続した空白文字が1文字に圧縮されることを示しますspace

数値ソートが必要な場合は、次のものを使用できます。

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

もちろん、これが2番目の列の不規則性を修正するわけではありませんでした。したがって、編集します。この場合、質問があります。次の行で

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

これらの区切り記号12タブまたはスペースはありますか?

関連情報