Chinaunix
标题:
求按照第二列取前2条记录的shell
[打印本页]
作者:
zkg510168343
时间:
2016-02-02 13:59
标题:
求按照第二列取前2条记录的shell
文件内容:
2016-01-01 123
2016-01-01 456
2016-01-01 789
2016-01-02 123
2016-01-02 456
2016-01-02 789
2016-01-03 123
2016-01-03 456
2016-01-03 789
2016-01-04 123
2016-01-04 456
2016-01-04 789
2016-01-05 123
2016-01-05 456
2016-01-05 789
现在想根据第二列分组获取最新的前两条记录 注:第二列是user_id,也就是获取每个用户最新的两条记录,希望结果如下:
2016-01-05 123
2016-01-05 456
2016-01-05 789
2016-01-04 123
2016-01-04 456
2016-01-04 789
求救这个shell应该怎么写?各位大神帮帮忙,研究好久了
作者:
radish1027
时间:
2016-02-02 14:27
user_id是固定的那些数字?还是随机的?最新是什么意思,是排在最上面?还是数字最小?
作者:
haooooaaa
时间:
2016-02-02 14:35
awk '{a[$2][2]=a[$2][1];a[$2][1]=$1}END{for(i=1;i<=2;i++)for(j in a)print a[j][i],j}' file
2016-01-05 123
2016-01-05 456
2016-01-05 789
2016-01-04 123
2016-01-04 456
2016-01-04 789
复制代码
gawk 4
作者:
jason680
时间:
2016-02-02 14:45
回复
1#
zkg510168343
$ awk '{d[
$2
,++a[$2]
%2
]=$0}END{t=asort(d);for(n=t;n>0;--n)print d[n]}' FILE
2016-01-05 789
2016-01-05 456
2016-01-05 123
2016-01-04 789
2016-01-04 456
2016-01-04 123
作者:
zxy877298415
时间:
2016-02-02 14:58
本帖最后由 zxy877298415 于 2016-02-02 15:00 编辑
awk '{if(a[$2]) {a[$2]=$1} if(a[$2]<$1) {a[$2]=$1} b[$2]=b[$2]?b[$2]" "$1:$1}END{for(i in a) {print a[i],i;t=split(b[i],c," "); for(j=1;j<=t;j++) {if(c[j]>k&&c[j]!=a[i]) {s=c[j]}} print s,i}}' file
复制代码
回复
1#
zkg510168343
作者:
zkg510168343
时间:
2016-02-02 15:08
回复
3#
haooooaaa
非常感谢,虽然我测试的时候提示语法错误,但是应该是我的版本问题
作者:
zkg510168343
时间:
2016-02-02 15:09
回复
4#
jason680
按照你的方法果然可以了,非常感谢,确实我的问题没有描述清楚,谢谢,两位的代码我已经收藏,非常经典
作者:
LikeLx
时间:
2016-02-03 09:17
awk 'a[$2]{b[$2]=a[$2]"\n"$0}{a[$2]=$0}END{for(i in b)print b[i]}'
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2