免费注册 查看新帖 |

Chinaunix

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

[文本处理] 有2个公式的文本数据处理问题? [复制链接]

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

如何用bash shell脚本处理一下文件:

  1.        第1列        第2列      第3列(C0)  第4列(A1)   第5列(A2)
  2. 文件:1.dat
  3.         90.0000   33.0000    3.0841      0.0000       -0.0052   
  4.         90.5000   33.0000    3.0787      0.0003       -0.0071   
  5.         91.0000   33.0000    3.0694      0.0005       -0.0094   
  6.         91.5000   33.0000    3.0564      0.0006       -0.0116   
  7.         (共2000行)
复制代码
根据上面一个文件1.dat,对第4列和第5列经过公式转换成下面一个文件,前三列值不变,第4,5列的A和θ计算公式为:
要得到下面文件:

  1. 第1列    第2列    第3列(C0)              第4列                 第5列
  2. 90.0000   33.0000    3.0841           A                        θ   
  3. 90.5000   33.0000    3.0787           A                        θ
  4. 91.0000   33.0000    3.0694           A                        θ  
  5. 91.5000   33.0000    3.0564           A                        θ
  6. 92.0000   33.0000    3.0430           A                        θ
复制代码
想用bash shell来实现这个文本处理功能,菜鸟我不知道该怎么处理,谢谢各位!

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
2 [报告]
发表于 2016-01-05 17:16 |只看该作者
  1. [root@hp8:~]# cat file
  2.         90.0000   33.0000    3.0841      0.0000       -0.0052
  3.         90.5000   33.0000    3.0787      0.0003       -0.0071
  4.         91.0000   33.0000    3.0694      0.0005       -0.0094
  5.         91.5000   33.0000    3.0564      0.0006       -0.0116
  6. [root@hp8:~]# cat file|awk '{a1=$1;a2=$2;m=a1*a1+a2*a2;n=a1/a2;cmd1="echo \"scale=4; sqrt("m")\"|bc -l";cmd1|getline a;cmd2="echo \"scale=4; 0.5*a("n")\"|bc -l";cmd2|getline t;print$1,$2,$3,a,t}'
  7. 90.0000 33.0000 3.0841 95.8592 .6096
  8. 90.5000 33.0000 3.0787 96.3288 .6105
  9. 91.0000 33.0000 3.0694 96.7987 .6114
  10. 91.5000 33.0000 3.0564 97.2689 .6123
  11. [root@hp8:~]#
复制代码
回复 1# tengfei0311


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2016-01-05 17:37 |只看该作者
回复 1# tengfei0311

$ awk '{OFS="\t";a=$4;b=$5;$4=sqrt(a*a+b*b);$5=0.5*atan2(a,b)}1' 1.dat
90.0000        33.0000        3.0841        0.0052        1.5708
90.5000        33.0000        3.0787        0.00710634        1.54968
91.0000        33.0000        3.0694        0.00941329        1.54423
91.5000        33.0000        3.0564        0.0116155        1.54496

   

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

谢谢您的帮助 好像你求出的四五列值不对啊   

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
5 [报告]
发表于 2016-01-05 18:19 |只看该作者
本帖最后由 tengfei0311 于 2016-01-05 18:25 编辑

回复 3# jason680


谢谢您的帮助,中间有一点不懂。
  1. $5=0.5*atan2(a,b)}1
复制代码
这里的1是什么意思呢?
   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2016-01-05 18:23 |只看该作者
回复 5# tengfei0311

http://bbs.chinaunix.net/thread-2309494-1-1.html
awk初学之常见问题
1. awk ‘{code}1’ 中的“1”是干什么的?
...
   

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

您好,我想问一下,0.5*atan2(a,b) 用这个atan求出来的值是不是一个弧度值?  这里我想要一个角度值。用arctan求,就是求反函数 。这里这样写是不是不对?


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2016-01-05 19:07 |只看该作者
回复 7# tengfei0311

弧度与角度

2 * pi = 2 * 3.1415926 = 圆 = 360度
      pi =  3.1415926 = 半圆 = 180度

弧度 = 角度 / 180 * pi
角度 = 弧度 / pi * 180

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


你这样就是对的吗?我只是看见别人论文里面都是arctan或者tan-1  我不知道atan跟arctan本质区别。

我看见别人用matlab写的code是这样的形式
  1.     MagAzim(i,2) = 0.5*atan2(cdata(i,6),cdata(i,5));
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2016-01-05 19:26 |只看该作者
回复 9# tengfei0311


https://www.gnu.org/software/gawk/manual/gawk.html#Numeric-Functions

9.1.2 Numeric Functions

The following list describes all of the built-in functions that work with numbers. Optional parameters are enclosed in square brackets ([ ]):

atan2(y, x)

    Return the arctangent of y / x in radians. You can use ‘pi = atan2(0, -1)’ to retrieve the value of pi.

cos(x)

    Return the cosine of x, with x in radians.

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP