免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2292 | 回复: 8
打印 上一主题 下一主题

求教awk代码!(删除日期小的记录) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-01 16:03 |只看该作者 |倒序浏览
如题:我的问题是一个文件,三列,第一列为客户码,第二列为日期,第三列为地址,
我的客户地址变动后,相对于第一列就会有重复,我想只保留日期最近的记录,
只能用awk解决,求各位大侠了!!!

论坛徽章:
0
2 [报告]
发表于 2006-06-01 22:29 |只看该作者
日期格式很重要。还是贴上个比较直观的东西吧。

论坛徽章:
0
3 [报告]
发表于 2006-06-02 15:29 |只看该作者
本人是菜鸟,随便写了一个,效率可能比较低,各位老手指教!
脚本tmp.sh
awk '{print $1}' $1|sort -u|while read id
do
grep ^$id $1|tail -1
done
执行./tmp.sh 输入文件名>输出文件名
说明:id为客户码,并假设时间是按顺序排列。

论坛徽章:
0
4 [报告]
发表于 2006-06-04 16:58 |只看该作者
源文为:
B|32010228240996|杨采梅|2|_|苏咀刘庄一组|_|_|_|20060201|0|
B|32010228309742|赵国花|2|_|刘六1组|_|223222|_|20060202|0|
B|32010228311624|邵春林|2|_|范集大花一组|_|_|_|20060202|0|
B|32010228320457|梁永文|1|_|楚州区泾口镇东宥村八组|_|_|_|20060203|0|
B|32010228360519|叶小友|1|_|条龙4|_|_|_|20060205|0|
B|32010228400408|华凤友|1|_|许王|_|_|_|20060207|0|
B|32010228311624|邵春林|2|_|范花组|_|_|_|20060207|0|
B|32010228249957|管凯|1|5781184|上河大姚黄庄组40号|_|_|_|20060207|0|
B|32010228258234|沈明生|1|5710785|平桥村|_|_|_|20060208|0|
B|32010228272244|何开梦|1|_|范集何朱八组|_|_|_|20060208|0|
B|32010228277256|任海龙|1|_|车桥|_|_|_|20060209|0|
B|32010228400408|华凤友|1|_|许王村八组|_|_|_|20060211|0|
B|32010228286683|苗金成|1|_|凡河村|_|_|_|20060213|0|
B|32010228354421|王晓峰|1|_|白农|_|_|_|20060222|0|
B|32010228365602|倪成筛|2|_|马东9|_|_|_|20060226|0|
想处理成:
B|32010228240996|杨采梅|2|_|苏咀刘庄一组|_|_|_|20060201|0|
B|32010228309742|赵国花|2|_|刘六1组|_|223222|_|20060202|0|
B|32010228320457|梁永文|1|_|楚州区泾口镇东宥村八组|_|_|_|20060203|0|
B|32010228360519|叶小友|1|_|条龙4|_|_|_|20060205|0|
B|32010228311624|邵春林|2|_|范花组|_|_|_|20060207|0|
B|32010228249957|管凯|1|5781184|上河大姚黄庄组40号|_|_|_|20060207|0|
B|32010228258234|沈明生|1|5710785|平桥村|_|_|_|20060208|0|
B|32010228272244|何开梦|1|_|范集何朱八组|_|_|_|20060208|0|
B|32010228277256|任海龙|1|_|车桥|_|_|_|20060209|0|
B|32010228400408|华凤友|1|_|许王村八组|_|_|_|20060211|0|
B|32010228286683|苗金成|1|_|凡河村|_|_|_|20060213|0|
B|32010228354421|王晓峰|1|_|白农|_|_|_|20060222|0|
B|32010228365602|倪成筛|2|_|马东9|_|_|_|20060226|0|

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2006-06-04 17:22 |只看该作者

  1. awk -F\| '!a[$3]++{print $0>"filename"}' filename
复制代码

论坛徽章:
0
6 [报告]
发表于 2006-06-04 18:32 |只看该作者
烈火你这个只是按field 3做uniq吧, 没看清楼主的意思

example>sort --v  |sed 1q
sort (GNU coreutils) 5.96
example>uniq --v | sed 1q
uniq (GNU coreutils) 5.96
example>cat dat
B|32010228240996|杨采梅|2|_|苏咀刘庄一组|_|_|_|20060201|0|
B|32010228309742|赵国花|2|_|刘六1组|_|223222|_|20060202|0|
B|32010228311624|邵春林|2|_|范集大花一组|_|_|_|20060202|0|
B|32010228320457|梁永文|1|_|楚州区泾口镇东宥村八组|_|_|_|20060203|0|
B|32010228360519|叶小友|1|_|条龙4|_|_|_|20060205|0|
B|32010228400408|华凤友|1|_|许王|_|_|_|20060207|0|
B|32010228311624|邵春林|2|_|范花组|_|_|_|20060207|0|
B|32010228249957|管凯|1|5781184|上河大姚黄庄组40号|_|_|_|20060207|0|
B|32010228258234|沈明生|1|5710785|平桥村|_|_|_|20060208|0|
B|32010228272244|何开梦|1|_|范集何朱八组|_|_|_|20060208|0|
B|32010228277256|任海龙|1|_|车桥|_|_|_|20060209|0|
B|32010228400408|华凤友|1|_|许王村八组|_|_|_|20060211|0|
B|32010228286683|苗金成|1|_|凡河村|_|_|_|20060213|0|
B|32010228354421|王晓峰|1|_|白农|_|_|_|20060222|0|
B|32010228365602|倪成筛|2|_|马东9|_|_|_|20060226|0|
example>cat dat |
> sort -t\| -k2n -k10nr | # 按身份证排序, 相同身份证号按登记日期反向排序
> uniq -w17 | # 按每行首17个字符(身份证)作uniq
> sort -t\| -k10n # 最后按登记顺序再排序 (原始数据的排序方式)

B|32010228240996|杨采梅|2|_|苏咀刘庄一组|_|_|_|20060201|0|
B|32010228309742|赵国花|2|_|刘六1组|_|223222|_|20060202|0|
B|32010228320457|梁永文|1|_|楚州区泾口镇东宥村八组|_|_|_|20060203|0|
B|32010228360519|叶小友|1|_|条龙4|_|_|_|20060205|0|
B|32010228249957|管凯|1|5781184|上河大姚黄庄组40号|_|_|_|20060207|0|
B|32010228311624|邵春林|2|_|范花组|_|_|_|20060207|0|
B|32010228258234|沈明生|1|5710785|平桥村|_|_|_|20060208|0|
B|32010228272244|何开梦|1|_|范集何朱八组|_|_|_|20060208|0|
B|32010228277256|任海龙|1|_|车桥|_|_|_|20060209|0|
B|32010228400408|华凤友|1|_|许王村八组|_|_|_|20060211|0|
B|32010228286683|苗金成|1|_|凡河村|_|_|_|20060213|0|
B|32010228354421|王晓峰|1|_|白农|_|_|_|20060222|0|
B|32010228365602|倪成筛|2|_|马东9|_|_|_|20060226|0|
example>

论坛徽章:
0
7 [报告]
发表于 2006-06-04 20:25 |只看该作者
要求文件是时间顺序的。
估计效率很低。
tac a | awk -F \| '!a[$2]++' | tac

论坛徽章:
0
8 [报告]
发表于 2006-06-09 17:59 |只看该作者
谢谢各位!

论坛徽章:
0
9 [报告]
发表于 2006-06-20 15:34 |只看该作者
我的最后方法是:
sort -t"|" -k 2 -k 10r data.txt | awk -F"|" '!a[$2]++' > out.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP