ソートキーに関する質問

ソートキーに関する質問

ソートキーが列の2番目の文字から始まり、2番目の列の数字であるファイルをソートしたいと思います。たとえば、

4 31
5 a14
2 h11
1 x4
2 z3

希望の出力は次のとおりです。

4 31
2 z3
1 x4
2 h11
5 a14

これはsort -k可能なアプローチのように見えますが、予想ほどうまく機能しません。

k, --key=KEYDEF

キーでソートすると、場所とタイプが提供されます。

KEYDEF は開始位置と停止位置を表す F[.C][OPTS][,F[.C][OPTS]] です。ここで、Fはフィールド番号、Cはフィールドの文字位置です。どちらも原点1で、停止位置はデフォルトで行末に設定されます。 -t と -b の両方が有効でない場合、フィールドの文字は前のスペースの先頭から計算されます。 OPTSは、このキーのグローバルソートオプションをオーバーライドする1つ以上の単一文字ソートオプション[bdfgiMhnRrV]です。キーが指定されていない場合は、行全体がキーとして使用されます。

私はこれを試みます:

sort -k 2.2V file
4 31
5 a14
2 h11
1 x4
2 z3

これを正しい方法で行う方法は?

答え1

次の問題が発生しました。

フィールドの文字は、前のスペースの先頭から計算されます。

sort -k 2.3V file

希望の結果を得ることができます。フィールドを区切るスペースは、2番目のフィールドの最初の文字です。

または、b先行スペースを無視するオプションを追加できます。

sort -k 2.2bV file

これにより、フィールドの前にスペースがあってもキー定義を使用できます。

関連情報