Linuxで日、日、月、年に基づいて日付を並べ替える方法

Linuxで日、日、月、年に基づいて日付を並べ替える方法

以下の形式のように日付を並べ替えようとしていますが、日、日付、月、年に基づいて並べ替えることはできません。いくつかの他の方法を試しましたが、うまくいきません。どんな意見でも大変感謝いたします。

私が試したこと:

rpm -qa --queryformat '%{installtime:date}\n' | 
    sort -n
rpm -qa --queryformat '%{installtime:date}\n' | 
    awk '{$1=""; print $0}' | sort -t- -k2.1,2.3
rpm -qa --queryformat '%{installtime:date}\n' | 
    awk '{$1=""; print $0}' | sort -n -k3 -k2 -k1

フォーマット/出力:

Wed 17 May 2017 01:41:05 PM CDT
Wed 17 May 2017 01:41:05 PM CDT
Wed 17 May 2017 01:41:06 PM CDT
Wed 17 May 2017 01:41:06 PM CDT
Wed 28 Apr 2021 08:56:30 AM CDT
Wed 29 Jan 2020 04:57:23 PM CST
Wed 29 Jan 2020 04:57:24 PM CST

答え1

使用されるオプションsortは、-M「1月」..「12月」の順序で月をソートします。

 sort -k4,4n -k3,3M -k2,2n    

出力は年、月、最後の日付でソートされます。

のコア標準形式は-k field1[,field2]非常に重要かもしれません(この場合はそれほど重要ではありませんが)。キーが欠落している場合、field2キーの終わりはデフォルトで行の終わりに設定されます。

答え2

次のことができます。

$ rpm -qa --last --queryformat '%{installtime:date}\n'

または:

$ rpm -qa --last --queryformat '%{installtime:date}\n' | tac

逆順に並べてみてください

答え3

dateman date(表示)を使って日付を変換できます。

"%s     seconds since the Epoch (1970-01-01 00:00 UTC)"

例えば

]$ date -d "Wed 17 May 2017 01:41:05 PM CDT" +%s
1495046465

その後、紙に使用してからsort日付に戻ります。

date -d @1495046465

man dateTZを再利用する必要があるかもしれません。

関連情報