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 这样的情况?
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)` 来实现!
不好意思,以上是我看到这个问题时,粗略的一个想法,还没有细想,有时间我再帮你细想下,希望对你有所帮助!
然后可以先用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的倒写形式。
虽然你说的我不懂,但是没有别人回复,还是感谢你的回复,把分都给你
解决方法:tac text| awk '!a[$1]++' | tac
tac从最后一行开始显示,是cat的倒写形式。
虽然你说的我不懂,但是没有别人回复,还是感谢你的回复,把分都给你
#1
想先问下你这个第一列数值相同的行都是挨在一起的吗?有没有会出现 3 4
4 2
3 5
4 3 这样的情况?
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)` 来实现!
不好意思,以上是我看到这个问题时,粗略的一个想法,还没有细想,有时间我再帮你细想下,希望对你有所帮助!
然后可以先用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的倒写形式。
虽然你说的我不懂,但是没有别人回复,还是感谢你的回复,把分都给你
解决方法:tac text| awk '!a[$1]++' | tac
tac从最后一行开始显示,是cat的倒写形式。
虽然你说的我不懂,但是没有别人回复,还是感谢你的回复,把分都给你