日付を含む列に対して複数列のソートを実行するには?

日付を含む列に対して複数列のソートを実行するには?

複数の列がカンマで区切られ、1列にmm / dd / yyyy形式の日付がある次のようにファイルをソートしようとしています。

$cat ファイル名

AN1143,45.7,03/05/2012,
H9477,45.3,01/15/2010,
DN1222,45.1,03/05/1800,
J960,26.7,06/02,1990,
Z959,122.2
H12421,27.7,06/21/2000

私の意図は、最初の列に基づいて最初に並べ替え、次に日付を持つ3番目の列に基づいて並べ替えることです。次のコマンドを試しました。

sort -t"," -k1,1 -k3,9n.3,10n -k3,1n.3,2n -k3,4n.3,5n filename 

ただし、このエラーが発生します。説明にご協力いただきありがとうございます。

並べ替え: フィールド仕様の不正な文字: 無効なフィールド仕様 '3,9n.3,10n'

ベストアンサー1

この試み:

sort -t, -k1,1 -k3.7n -k3.1,3.2n -k3.4,3.5n < filename
  • カンマ区切り文字を引用する必要はありません。
  • 最初のソートキー定義は列1を使用します。
  • 2 番目のソートキー定義は、列 3 の年フィールドを使用して数値でソートします。
  • 3番目のソートキーは、列3の月フィールドを使用して数値でソートします。
  • 4番目のソートキーは、3列の「日」フィールドを使用して数字でソートします。

拡張サンプルデータファイルを使用して例を実行すると、ソートが表示されます。

入力する:

AN1143,45.7,03/05/2012,
AN1143,45.7,02/05/2012,
AN1143,45.7,03/04/2012,
AN1143,45.7,03/05/2011,
H9477,45.3,01/15/2010,
DN1222,45.1,03/05/1800,
J960,26.7,06/02,1990,
Z959,28.2,03/21/2016,
H12421,27.7,06/21/2000

出力:

AN1143,45.7,03/05/2011,
AN1143,45.7,02/05/2012,
AN1143,45.7,03/04/2012,
AN1143,45.7,03/05/2012,
DN1222,45.1,03/05/1800,
H12421,27.7,06/21/2000
H9477,45.3,01/15/2010,
J960,26.7,06/02,1990,
Z959,28.2,03/21/2016,

おすすめ記事