尝试这个:
sort -t, -k2 user.txt | awk -F, '{a[$1]=$2}END{for(e in a){print e, a[e]}}' OFS=","
解释:
按日期字段升序对条目进行排序,将排序结果通过管道传递给 awk,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=","