数字、文字、句読点が混在する列に基づいてファイルをソートする方法は?

数字、文字、句読点が混在する列に基づいてファイルをソートする方法は?

次の形式のテキストファイルがあります。

b   SN:2
d   SN:5
f   SN:10
g   SN:11
h   SN:15
i   SA:3
j   SN:1
k   SN:4

2番目の列、実際には2番目の列の数値に基づいてソートしたいと思います。私は努力しました -

$ sort -n -k2,2 file
$ sort -k2.4,2.5n file

しかし、何も動作しないようです。

答え1

オプションを使用しないため-t-bまたはGNUソート)、したがって計算は先行スペースの始めから始めるべきです。 POSIXの定義sort -k 拡張の説明ように:

A field comprises a maximal sequence of non-separating characters and, in 
the absence of option -t, any preceding field separator

したがって、以下を使用する必要があります。

$ sort -nk2.7 file
j   SN:1
b   SN:2
i   SA:3
k   SN:4
d   SN:5
f   SN:10
g   SN:11
h   SN:15

ただし、これをフィールド区切り文字として使用してから、2:番目のフィールドに基づいて数値を並べ替えることができます。

$ sort -t':' -nk2 file
j   SN:1
b   SN:2
i   SA:3
k   SN:4
d   SN:5
f   SN:10
g   SN:11
h   SN:15

答え2

ただあなたの状況に合わせてman sort

-t と -b の両方が有効でない場合、フィールドの文字数を計算します。 前のスペースから始める

だから

sort -k2.7n file

仕事ができる

ヒント!

行から計算を開始するには、-t存在しない文字の許可を使用して行をフィールドとして処理できます。

sort -t% -k1.8n file

関連情報