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

时间:2022-02-13 14:29:07
有如下格式文本文件,几万行
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
感谢 第一列相同的行,如何只取最后一行?

3 个解决方案

#1


想先问下你这个第一列数值相同的行都是挨在一起的吗?有没有会出现 3 4
                                                       4 2
                                                       3 5
                                                       4 3  这样的情况?

#2


如果不是这样的话,我想可以用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)` 来实现!

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


#3


其实没这么复杂啦,你说的行列自己都说晕了吧。
解决方法:tac text| awk '!a[$1]++' | tac
tac从最后一行开始显示,是cat的倒写形式。
虽然你说的我不懂,但是没有别人回复,还是感谢你的回复,把分都给你 第一列相同的行,如何只取最后一行?
引用 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行开始,找出第二列相同的行且设置找出来的行数要大于等于……

#1


想先问下你这个第一列数值相同的行都是挨在一起的吗?有没有会出现 3 4
                                                       4 2
                                                       3 5
                                                       4 3  这样的情况?

#2


如果不是这样的话,我想可以用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)` 来实现!

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


#3


其实没这么复杂啦,你说的行列自己都说晕了吧。
解决方法:tac text| awk '!a[$1]++' | tac
tac从最后一行开始显示,是cat的倒写形式。
虽然你说的我不懂,但是没有别人回复,还是感谢你的回复,把分都给你 第一列相同的行,如何只取最后一行?
引用 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行开始,找出第二列相同的行且设置找出来的行数要大于等于……