GNUソートを使用してください。繰り返しキーに基づいて行セットの最初の行だけを印刷したいと思います。
-k1,2
期待どおりに動作します。ソートされた最初の行のみが出力されます。
printf %s\\n 'a a c' 'a a b' 'a a a' | sort -u -k1,2 -t' '
# a a a
-k1
するいいえ期待どおりに動作します。ソートされた3行すべてが出力されます。
printf %s\\n 'a a c' 'a a b' 'a a a' | sort -u -k1 -t' '
# a a a
# a a b
# a a c
のすべてのバリアントについて、これは正常ですかsort
、それともGNUタイプに固有のものですか?現れやすくなると思います。「予想できない結果」、man sort
図に示すように、2番目のキー番号は任意に選択できる:-k, --key=POS1[,POS2]
-k1,1
は適用されますが、-u
通常のソート(例:no -u
)はのみ適用されます-k1
。
答え1
私はこれが次のPOSIXの基本的な動作だと思います。マニュアルページ:
-k フィールド開始[タイプ][,フィールド終了[タイプ]]
キーフィールドは、field_startで始まりfield_endで終わるように定義する必要があります。ただし、field_startが行末を超えて拡張されたり、field_end以降に拡張されない限り、この場合キーフィールドは空です。欠落している field_end は行の最後の文字を示します。