免费注册 查看新帖 |

Chinaunix

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

shell优化问题讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-23 22:15 |只看该作者 |倒序浏览
%cat infile

21212,34322,323232,2007/10/23 10:00:00
21542,32322,323432,2007/10/23 10:00:00
25412,32322,323232,2007/10/23 10:00:00
21432,32872,323232,2007/10/23 10:00:00
25612,38722,323232,2007/10/23 10:05:00
21256,32872,323232,2007/10/23 10:05:00
...
21782,37322,323232,2007/10/23 10:10:00
21872,32322,323232,2007/10/23 10:10:00
21902,37822,323232,2007/10/23 10:10:00

现在要得到最后一列时间的唯一记录,之前用
%cat infile|awk '{print $4}'|sort -u

2007/10/23 10:00:00
2007/10/23 10:05:00
2007/10/23 10:10:00

得到所有记录中出现过的时间。结果发现sort占用cpu相当高,sort一个2M的文件尽然占了10%左右的cpu。请问哪位高手能不能有其它办法把这些唯一的时间取出来?

[ 本帖最后由 93237984 于 2007-10-23 22:22 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-10-23 22:17 |只看该作者
try:
awk '!a[$NF]++'

[ 本帖最后由 寂寞烈火 于 2007-10-23 22:32 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-10-24 09:33 |只看该作者
原帖由 寂寞烈火 于 2007-10-23 22:17 发表
try:
awk '!a[$NF]++'



能否简单解释一下这个命令?

论坛徽章:
0
4 [报告]
发表于 2007-10-25 00:42 |只看该作者
原帖由 寂寞烈火 于 2007-10-23 22:17 发表
try:
awk '!a[$NF]++'


不行啊大哥,报错了。我用的是AIX操作系统。还有没有别的方法呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2007-10-25 01:21 |只看该作者
原帖由 93237984 于 2007-10-25 00:42 发表


不行啊大哥,报错了。我用的是AIX操作系统。还有没有别的方法呢?

俺用Linux......

论坛徽章:
0
6 [报告]
发表于 2007-10-25 07:53 |只看该作者
似乎这个文件是按照时间的先后顺序排序的
可以试试:
awk -F, '{print $4}' infile | uniq

解释:
-F,  用,做分隔符,这样时间就是第四个字段

论坛徽章:
0
7 [报告]
发表于 2007-10-25 08:03 |只看该作者
原帖由 springwind426 于 2007-10-25 07:53 发表
似乎这个文件是按照时间的先后顺序排序的
可以试试:
awk -F, '{print $4}' infile | uniq

解释:
-F,  用,做分隔符,这样时间就是第四个字段


我试了试可以的,但如果时间排列原来是乱的呢?我现在需要按照时间顺序排列又不能用sort应该怎么搞?

论坛徽章:
0
8 [报告]
发表于 2007-10-25 08:51 |只看该作者
不知道你的awk的版本


  1. awk -F, '{a[$4]=1}END{for(t in a)print t}' infile
复制代码


在我的系统中执行上面的代码后,会输出唯一的时间列表

解释:
a[$4]=1 就是在 数组变量a中添加一个项,其key值为获取到的时间(在awk中,数组是关联数组,即key=>value)
END{} 表示处理完所有的输入后处理
for(t in a)print t  表示遍历数组,取出其key,并打印

论坛徽章:
0
9 [报告]
发表于 2007-10-25 09:18 |只看该作者
先uniq再sort,好像也没有办法了,你可以去读一下排序算法。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
10 [报告]
发表于 2007-10-25 09:25 |只看该作者
原帖由 93237984 于 2007-10-25 00:42 发表


不行啊大哥,报错了。我用的是AIX操作系统。还有没有别的方法呢?


抱什么错啊?也不说一下。
这是最简单的方法了。

awk -F, '!a[$NF]++' urfile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP