我有一个具有下一个格式的文件
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