フィールドのセクションに基づいてファイルをソートする方法


11

ファイルを並べ替えたい:

   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
     F91HE*-K92HA      7.242      3.910   4.88e+04 -- 

そしてこれを入手

   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
   F91HE*-K92HA      7.242      3.910   4.88e+04 -- 
   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 

つまり、行の非ブランクの最初のシーケンスの2番目以降の文字で数値順にソートします。


どうやらエディタは私がファイルに使用したフォーマットを保持していませんでした...
edith

sortコマンドを試しましたか?
Eric Renouf、2016年

はい、しかしどうやらtuがどのように適切に使用するのかわかりません。それらが働いた
edith

1
2番目の文字から始まる番号で並べ替えますか?
pfnuesel

丁度。問題は、ファイル内の最初のフィールドの前にさまざまな数の空白があることです
edith

回答:


19
sort -k 1.2bn < file

ソートnumericallyでk始まるEY 2NDの文字1番目の大手無視フィールドblanksを(と行の最後で終わるが、それは唯一の桁の最初のシーケンスを考慮した数値の並べ替えのための問題ではありません)。

次の2行の間にネクタイがある場合は注意してください。

    F91HE*-K92HA      7.242      3.910   4.88e+04 --
  F91HE*-F91HZ      7.237      7.122   7.85e+05 --

その後、2つの行を文字列として完全に比較する最後のソートに基づいて順序が決まります。

一部のロケールでは、文字列を比較する最初のインスタンスで空白が無視されます。その場合、F91はK92の前に来ます(Fソート前と同様K)。Cロケールのような他のものでは、空白は無視されず、K92はF91の前に来ます(スペースはの前にソートされますF)。

ロケールに関係なく先頭の空白を無視する最後のソートの場合は、次のようにできます。

sort -k 1.2bn -k 1b < file

これ1bは、先頭の空白を無視して、最初のフィールドで始まる行のセクションで(最初のキーのタイに基づいて)字句的にソートします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.