Linux

如何使用包含日期的列對多列進行排序?

  • November 28, 2016

我正在嘗試對一個文件進行排序,該文件具有多列,用逗號分隔,其中一列的日期格式為 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,28.2,03/21/2016,

H12421,27.7,06/21/2000

我的意圖是先根據第一列排序,然後再根據日期的第三列排序。我嘗試了以下命令:

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

但我遇到了這個錯誤,感謝任何解釋幫助。

排序:欄位規範中的雜散字元:無效的欄位規範â3,9n.3,10nâ

試試這個:

sort -t, -k1,1 -k3.7n -k3.1,3.2n -k3.4,3.5n < filename
  • 無需引用逗號分隔符
  • 第一個排序鍵定義使用第 1 列
  • 第二個排序鍵定義使用第 3 列的“年份”欄位,按數字排序
  • 第三個排序鍵使用第 3 列的“月”欄位,按數字排序
  • 第四個排序鍵使用第 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,

引用自:https://unix.stackexchange.com/questions/326615