これを試して:
sort -t, -k2 user.txt | awk -F, '{a[$1]=$2}END{for(e in a){print e, a[e]}}' OFS=","
説明:
エントリを日付フィールドで昇順に並べ替え、並べ替えた結果を awk にパイプします。これは最初のフィールドをキーとして使用するだけなので、同じキーを持つエントリの最後のエントリのみが保持され、最終的に出力されます。
編集
さて、エントリを辞書順で並べ替えることができません。数値で比較できるように日付をタイムスタンプに変換する必要がある場合は、次を使用します。
awk -F",\"" '{ cmd=" date --date " $2 " +%s "; cmd | getline ts; close(cmd); print ts, $0, $2}' user.txt | sort -k1 | awk -F"[, ]" '{a[$2]=$3}END{for(e in a){print e, a[e]}}' OFS=","
MacOS を使用している場合は、gdate
代わりに次を使用します。
awk -F",\"" '{ cmd=" gdate --date " $2 " +%s "; cmd | getline ts; close(cmd); print ts, $0, $2}' user.txt | sort -k1 | awk -F"[, ]" '{a[$2]=$3}END{for(e in a){print e, a[e]}}' OFS=","