ソート時のGNUソート安定したソートはソート順序を知りません。

ソート時のGNUソート安定したソートはソート順序を知りません。

2つの列で構成されるファイルがあります。ファイルは私が望む方法で列1にソートされています。列1の各カテゴリ内で列2をソートしたいと思います。ただし、sort列 1 のソート順は認識されません。

(スタックに関する同様の質問からのものです)一般的なアプローチは次のとおりです。

sort --stable -k1,1 -k2,2n

ただし、k1 の順序は任意であるため指定できません。

入力例:

C 2
C 1
A 2
A 1
B 2 
B 1

そして出力:

C 1
C 2
A 1
A 2
B 1 
B 2

ベストアンサー1

awk を使用して、各ブロックに対して新しいソートを開始できます。

% awk -v cmd="sort -k2,2" '$1 != prev {close(cmd); prev=$1} {print | cmd}' foo
C 1
C 2
A 1
A 2
B 1
B 2
  • $1 != prev {close(cmd); prev=$1}- 保存された値が異なる場合、新しいブロックが作成されるため、以前に開始されたブロックをすべて閉じます。sort
  • {print | "sort -k2,2"}'出力をにパイプsortし、まだ実行されていない場合は開始します(awkは起動されたコマンドを追跡できます)。

おすすめ記事