免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk使用...?菜鸟求指导。 [复制链接]

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-10 21:02 |只看该作者 |倒序浏览
本帖最后由 tengfei0311 于 2015-09-10 21:08 编辑

我有300多个.dat的文件,第一列为每一层的厚度H,第二三列分别为速度V。
下面是一个实例文件,假如这个文件中有24层厚度值(每一行值代表一层)。
2        5.9439        3.3152
2        5.9516        3.3199
2        5.9617        3.325
2        5.9637        3.3263
2        5.9536        3.3209
2        5.9354        3.3105
2        5.9163        3.3
2        5.907        3.2947
2        5.9141        3.2988
2        5.9431        3.3147
2        6.0251        3.3607
2        6.1413        3.4255
2        6.2855        3.5061
2        6.4498        3.5977
2        6.6246        3.6952
2        6.8015        3.7936
2        6.9716        3.8885
2        7.1284        3.9761
2        7.2665        4.0532
2        7.3827        4.118
5        7.4744        4.1691
5        7.5414        4.2063
5        7.5833        4.2295
10        7.6021        4.2404

我现在想把第一列累加,假如我现在要提取深度为h=10的速度 那么就第一列前五行值相加等于10,打印文件名和第三列值3.3209   
                               如果我要提取h=50的速度 那么就是前面22行值相加等于50,同时打印第三列4.2063

该怎么完成呢?
求h=10,打印对应的值

code:

for File in `ls *.dat`
awk '{sum += $1, sum=10};END {print FILENAME,$3} $File >>10.txt
done


不知道这个求和等于10,50这个怎么实现?菜鸟求高手指教。



论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2015-09-10 21:27 |只看该作者
  1. $ awk -vh=10 '{a+=$1;if(a==h){print FILENAME,$3}}' a
  2. a 3.3209

  3. $ awk -vh=50 '{a+=$1;if(a==h){print FILENAME,$3}}' a
  4. a 4.2063
复制代码

论坛徽章:
0
3 [报告]
发表于 2015-09-10 22:18 |只看该作者
$ awk 'BEGIN{sum=0}{if(sum<50) (sum+=$1)&&(V=$3)} END {print "sum=",sum,"V=",V}' count
sum= 50 V= 4.2063

论坛徽章:
11
射手座
日期:2015-08-11 16:10:26辰龙
日期:2015-08-11 16:11:11黑曼巴
日期:2016-04-26 16:58:40
4 [报告]
发表于 2015-09-11 09:15 |只看该作者
  1. awk '{a[FILENAME]+=$1;if(a[FILENAME]==10)print FILENAME,$3}' *.dat
复制代码

论坛徽章:
0
5 [报告]
发表于 2015-09-11 09:43 |只看该作者
- -还是没太明白需求

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
6 [报告]
发表于 2015-09-14 12:41 |只看该作者
回复 2# haooooaaa


    谢谢,搞定了!

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
7 [报告]
发表于 2015-09-14 12:42 |只看该作者
回复 4# hjfeng1988


    谢谢,已经搞定了这个问题。完全正确!

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
8 [报告]
发表于 2015-09-14 12:43 |只看该作者
回复 3# hello_unix

谢谢您的帮助

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP