免费注册 查看新帖 |

Chinaunix

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

[请教]用AWK计算时能否控制小数点后的位数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-28 16:43 |只看该作者 |倒序浏览
我在系统中得到下列的文件:
1 LATITUDE="+43:50:23.290"      LONGITUDE="+125:23:18.413"
2 LATITUDE="+43:51:43.190"      LONGITUDE="+125:21:08.413"  
   。。。。。。。。。。。。。。
N LATITUDE="+43:57:13.290"      LONGITUDE="+125:28:48.413"   

想经处理后转换得到下列的文件(只是示意,数值由上面的经纬度转换):
1        43.90119972        125.21729       
2        43.90119972        125.21729       
3        43.90119972        125.21729       
4              43.90119972        125.21729       
5        43.88694556        125.2769467
。。。。。。。。。。。。。

请高手帮忙解决,谢谢

我自己试着自己弄,方法很笨,能将度分秒定为$1,$2,$3,($3/60+$2)/60+$1  ,但是算出的结果小数点后只有一位,请问如何控制小数点后面的位数?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-06-28 18:15 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

printf"%.2f",var

论坛徽章:
0
3 [报告]
发表于 2003-06-28 19:01 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

谢谢,我是新手,能详细些吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-06-29 12:22 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

  1. cat yourdatafile|sed -n 's/.*"[+]\([^"]\{6,\}\)".*/\1/p' |awk -F":" '{printf"%d %.2f\n",NR,$1+$2/60+$3/3600}'
  2. 1 125.39
  3. 2 125.35
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-06-29 12:35 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

非常感谢
只是前面SED只取了LONGITUDE,前面还有LATITUDE,怎么用把两个都取出来?SED我是一点都不会。

再次感谢。

论坛徽章:
0
6 [报告]
发表于 2003-06-29 12:51 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

我自己费了牛劲用把源文件存成这样的格式:
1 43 52 25.307   126 31 2.385
2 43 48 58.112   126 29 38.971
..........................

然后用上面的方法:
cat myfile|awk '{printf"%d %.8f\n",$1,$2+$3/60+$4/3600,$5+$6/60+$7/3600}'

得到的结果是:
1 43.87369639
2 43.81572833
...............

后面的$5+$6/60+$7/3600 为什么显示不出来?

论坛徽章:
0
7 [报告]
发表于 2003-06-29 15:12 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

你在格式定义中只用了2个参数输出(%d%.8f)
所以只能输出($1,$2+$3/60+$4/3600)

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-06-29 15:39 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

原帖由 "suney" 发表:
我自己费了牛劲用把源文件存成这样的格式:
1 43 52 25.307   126 31 2.385
2 43 48 58.112   126 29 38.971
..........................

然后用上面的方法:
cat myfile|awk '{printf"%d %.8f\n",$1,$2+$3/6..........

试试这个(看着有点麻烦,但管用):   
  1. awk '{printf"%s\n%s\n",$2,$3}'  datafile|sed -n 's/.*"[+]\([^"]\{6,\}\)".*/\1/p'|awk -F":" '{printf"%.2f\n",$1+$2/60+$3/3600}'|sed '$!N;s/\n/ /'|awk '{printf"%d  %s\n",NR,$0}'
  2. 1  43.84  125.39
  3. 2  43.86  125.35
复制代码

论坛徽章:
0
9 [报告]
发表于 2003-07-04 13:53 |只看该作者

[请教]用AWK计算时能否控制小数点后的位数?

万分感谢
我最近只能用手机上网,上来回了几次贴都发不出去。

我按上面的方法试了,sed '$!N;s/\n/ /',这儿执行不过去。

另:每行前面的数字不是行号而是我的设备号,中间不是连续的。

我因为无法执行上面的代码,就用我的笨方法,分两次生成两个文件,一次生成经度,一次生成纬度。
但是我用join 合并两个文件时(两个文件第一列是设备号),却只将1-10和90-99合并了,其他的都没有,不知道是怎么回事。
最后只好用AWK合并的。

现在我完成了,虽然结果是我想要的,但是SHELL用的全是笨方法,等有机会我把详细的写上来,让高手给看看,再次表示感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP