Mac:列でデータを並べ替える

Mac:列でデータを並べ替える

次の形式の2つの列を持つ長いcsvファイルがあります。

RG_cne_1| 0.316571
RG_cne_10| 0.26924
RG_cne_100| 0.227538
RG_cne_1000| 0.385216
RG_cne_1001| 0.247508
RG_cne_1002| 0.496622
RG_cne_1003| 0.445685
RG_cne_1004| 0.53264
RG_cne_1005| 0.433687
RG_cne_1006| 0.295209
RG_cne_1007| 0.432938
RG_cne_1008| 0.368191
RG_cne_1009| 0.40916
RG_cne_101| 0.291027
RG_cne_1010| 0.389481
RG_cne_1011| 0.401816

RG_cne_1から最後のファイル(RG_cne_1011)までの最初の列名に基づいて、次の形式でデータをソート(行の順序を変更)する必要があります。

RG_cne_1| its value
RG_cne_2| its value
RG_cne_3| its value
RG_cne_4| its value
RG_cne_5| its value
...
RG_cne_1011| its value

私のMacでは、以下を試してみました。

LC_ALL=C sort -t'|' -k1,1g

ただし、これは誤った数値順序を生成します(上記のものと同様:1、10、100など)。

ベストアンサー1

一般化された数値ソート(g)では、ソートフィールドはまだ数字で始まる必要があり、そうでない場合は文字列比較を使用して置き換えられます。

以下は、3番目の区切りフィールドを_数値で並べ替えると仮定します。

$ sort -t '_' -k 3,3n file
RG_cne_1| 0.316571
RG_cne_10| 0.26924
RG_cne_100| 0.227538
RG_cne_101| 0.291027
RG_cne_1000| 0.385216
RG_cne_1001| 0.247508
RG_cne_1002| 0.496622
RG_cne_1003| 0.445685
RG_cne_1004| 0.53264
RG_cne_1005| 0.433687
RG_cne_1006| 0.295209
RG_cne_1007| 0.432938
RG_cne_1008| 0.368191
RG_cne_1009| 0.40916
RG_cne_1010| 0.389481
RG_cne_1011| 0.401816

おすすめ記事