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

gak*_*hov 6 awk shell-script sort uniq

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

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

less myfile.txt | sort -k1r | uniq -f 1  | sort -b -k1
Run Code Online (Sandbox Code Playgroud)

但它似乎工作不正常。

谢谢你的帮助!

Ulr*_*arz 6

我想你想要

cat myfile.txt| sort -k1 -r | sort --unique --stable -k2,3
Run Code Online (Sandbox Code Playgroud)

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


ang*_*gus 6

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

sort -k2,2 -k1,1r myfile.txt | uniq -f1
Run Code Online (Sandbox Code Playgroud)

即:按用户和倒序日期排序,只留下用户+访问的第一次出现。