フィールドの一部に基づいてファイルを並べ替える方法

フィールドの一部に基づいてファイルを並べ替える方法

ファイルをソートしたいです。

   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番目と後続の文字を数字でソートします。

ベストアンサー1

sort -k 1.2bn < file

nstフィールドの2番目kの文字で始まり、先頭のスペースを無視し、行の終わりで終わるようにeyを数字で並べ替えます。ただし、これは10進数の最初の順序だけを考慮する数値の並べ替えには重要ではありません。21b

たとえば、次の2行の間にタイがあります。

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

その後、2行を完全に文字列で比較する最後の手段に基づいて順序がソートされます。

一部のロケールでは、文字列を比較するときにスペースが最初に無視されます。この場合、F91はK92の前に表示されます(F前のsortのようにK)。他のロケールの場合(Cロケールの場合と同様)、スペースは無視されず、K92はF91の前に表示されます(スペースは前にソートされますF)。

ロケールに関係なく先行スペースを無視する最後の手段ソートの場合は、次のようにします。

sort -k 1.2bn -k 1b < file

この1b関数は先行スペースを無視し、最初のフィールドで始まる行の部分を語彙的に(最初のキーの関係に従って)ソートします。

おすすめ記事