使用 awk、uniq 和 sort 获取列中具有最大值的行

使用 awk、uniq 和 sort 获取列中具有最大值的行

我有一个具有下一个格式的文件

2011-12-01 user1 access1
2011-12-01 user1 access2
2011-12-01 user2 access2
2011-12-01 user4 access2
2011-12-02 user1 access1
2012-01-01 user3 access1
2012-01-01 user4 access2

我想要一个输出,为每个用户显示最后日期,所以

2011-12-02 user1 access1
2011-12-01 user1 access2
2011-12-01 user2 access2
2012-01-01 user3 access1
2012-01-01 user4 access2

我尝试过这样的事情:

less myfile.txt | sort -k1r | uniq -f 1  | sort -b -k1

但它似乎工作不正常。

谢谢你的帮助!

답변1

我想你想要

cat myfile.txt| sort -k1 -r | sort --unique --stable -k2,3

(请参阅我对上面的评论cat)。第一种排序会将最新日期放在顶部。第二种排序将按用户+访问权限排序,但是,通过给出--stable,将保留具有相同用户+访问权限组合的行的先前顺序,即最新的仍位于顶部。给出--unique,仅显示具有相同用户+访问权限组合的运行的第一行。 (| uniq -f1我想,如果它恰好是你的类别没有的 GNU 扩展,你可以将其替换为。)

답변2

你就快到了,只需要调整sort选项:

sort -k2,2 -k1,1r myfile.txt | uniq -f1

即:按用户排序并倒序日期,只保留第一次出现的用户+访问权限。

답변3

如果您只想通过一次调用来完成此操作awk

awk '($1 > a[$2,$3]){a[$2,$3]=$1}END{for(x in a){split(x,b,SUBSEP);print a[x],b[1],b[2]}}' in

관련 정보