免费注册 查看新帖 |

Chinaunix

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

[文本处理] 翻翻旧帖--求教awk处理“地学”应用中的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-09 09:03 |只看该作者 |倒序浏览
原帖地址:http://bbs.chinaunix.net/thread-225132-1-1.html
本人系菜鸟,刚学 awk ,对这个问题想了好久都不得其算法,在此向各位大侠求教,感激不尽!!
有一文件aa如下:
     650571.37     2188705.56              1.
       654437.44     2187283.55              1.
       653184.30     2187230.23              1.
       652925.37     2187289.22              1.
       650571.37     2188705.56              1.
       649691.51     2186999.15              1.
       652171.12     2186759.19              1.
       651886.72     2186794.74              1.
       651415.69     2186785.85              1.
       651086.85     2186812.51              1.
       650589.15     2186919.17              1.
       649691.51     2186999.15              1.
       637433.66     2186183.54              1.
       637890.88     2186243.18              1.
       636877.04     2186094.09              1.
       637433.66     2186183.54              1.
       645330.86     2190220.43              1.
       645920.33     2190210.21              1.
       644197.83     2190239.87              1.
       644734.38     2190242.31              1.
       645330.86     2190220.43              1.

现在我想用awk将其变成文件 bb 如下:
     650571.37     2188705.56              1.
       654437.44     2187283.55              1.
       653184.30     2187230.23              1.
       652925.37     2187289.22              1.
       650571.37     2188705.56              1.
       649691.51     2186999.15              2.
       652171.12     2186759.19              2.
       651886.72     2186794.74              2.
       651415.69     2186785.85              2.
       651086.85     2186812.51              2.
       650589.15     2186919.17              2.
       649691.51     2186999.15              2.
       637433.66     2186183.54              3.
       637890.88     2186243.18              3.
       636877.04     2186094.09              3.
       637433.66     2186183.54              3.
       645330.86     2190220.43              4.
       645920.33     2190210.21              4.
       644197.83     2190239.87              4.
       644734.38     2190242.31              4.
       645330.86     2190220.43              4.

这数据有个规律,既每段数据首尾两组数是相同的。原数据很多,我简化过了。 这个用fortran解决过,但 awk 还得求教各位大侠,谢    谢!!

个人怀着温故而知新的心态去解一些陈年旧题,有练手的意思,也有学习一些技巧的目的,觉得有更简单的写法,纯为交流,不违规吧?
  1. awk '{if(!h){h=$2;n++}else if(h==$2)h="";$3=n}1' a.txt
复制代码

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
2 [报告]
发表于 2014-12-09 09:21 |只看该作者
本帖最后由 klainogn 于 2014-12-09 09:26 编辑
  1. awk '{print $1,$2,b+1}a[$1,$2]++{b++}' file
  2. awk '{$3=b+1}a[$1,$2]++{b++}1' file
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-12-09 09:33 |只看该作者
回复 2# klainogn
看来,技术成熟了这么些年,奇思妙想是层出不穷呀!数组确实是一大思路,可能唯一的弊端就是内存的浪费,不过对现在的内存来讲都不是事儿。   

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
4 [报告]
发表于 2014-12-09 09:43 |只看该作者
学习了~~~~~~~

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
5 [报告]
发表于 2014-12-09 10:04 |只看该作者
看来前辈们要考虑的内容比我们多的多,不过这里的数组还好,是可以释放的,而且不影响结果
  1. awk '{$3=b+1}a[$1,$2]++{b++;delete a}1'
复制代码
回复 3# Looiml


   

论坛徽章:
0
6 [报告]
发表于 2014-12-11 08:49 |只看该作者
回复 3# Looiml


    牛!
学习了!
求工作!

论坛徽章:
0
7 [报告]
发表于 2014-12-12 20:29 |只看该作者
回复 6# pengmingguo


    哪里学的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP