第一列相同的行,如何只取最后一行?

lgjywjy 2011-04-10 08:06:18
有如下格式文本文件,几万行
3 4
3 5
4 2
4 3
4 4
6 3
6 4
7 1
8 3
9 1
9 2
。。。。。。
请问:对于第一列数值相同的行,如何只取最后一行?(没有重复的也要输出)对于上面数据想得到的结果是:
3 5
4 4
6 4
7 1
8 3
9 2
感谢
...全文
578 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgjywjy 2011-04-11
  • 打赏
  • 举报
回复
其实没这么复杂啦,你说的行列自己都说晕了吧。
解决方法:tac text| awk '!a[$1]++' | tac
tac从最后一行开始显示,是cat的倒写形式。
虽然你说的我不懂,但是没有别人回复,还是感谢你的回复,把分都给你
[Quote=引用 2 楼 korli319 的回复:]

如果不是这样的话,我想可以用sort来进行对数的第一行进行一下排序,使所有的第一列相同的数字都是挨在一起的。
然后可以先用awk中的NR函数给它加一个行号,那么就会变成:
1 3 4
2 3 5
3 4 2
4 4 3
5 4 4
6 6 3
7 6 4
。。。。

也就是说你原来的第一行变成了第二行,然后用awk从第1行开始,找出第二列相同的行且设置找出来的行数要大于等于……
[/Quote]
korli319 2011-04-10
  • 打赏
  • 举报
回复
如果不是这样的话,我想可以用sort来进行对数的第一行进行一下排序,使所有的第一列相同的数字都是挨在一起的。
然后可以先用awk中的NR函数给它加一个行号,那么就会变成:
1 3 4
2 3 5
3 4 2
4 4 3
5 4 4
6 6 3
7 6 4
。。。。

也就是说你原来的第一行变成了第二行,然后用awk从第1行开始,找出第二列相同的行且设置找出来的行数要大于等于1,然后分别读取第一列的行号,并取其中最大的一个行号的这一行(比如说这里是 2 ),那么这样就可以取出相同的行的最后一行!
当然这里要用一个while循环才行,将awk放在里面,到下一个循环的时候就从第3行开始,跟上面的一样将第四行找出来!

上面的从第3行开始找,可以用自加 a=2 a=`expr (a + 1)` 来实现!

不好意思,以上是我看到这个问题时,粗略的一个想法,还没有细想,有时间我再帮你细想下,希望对你有所帮助!


korli319 2011-04-10
  • 打赏
  • 举报
回复
想先问下你这个第一列数值相同的行都是挨在一起的吗?有没有会出现 3 4
4 2
3 5
4 3 这样的情况?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧