免费注册 查看新帖 |

Chinaunix

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

<AWK程序>解决数据外推问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-23 04:49 |只看该作者 |倒序浏览
求一AWK程序。。。解决如下问题:

原文本如下:
============================================================
SPNT    3802780    2780.0    508155   4263896       761
VELF    3802780    0    6 1575  208 1706  321 1793  482 1862  643 1950
VELF                  762 1975  911 2018 1024 2062 1173 2118 1274 2150
VELF                 1446 2206 1577 2237 1720 2318 1827 2368 1946 2437
VELF                 2185 2581 2393 2700 2595 2831 2768 2937 3125 3156
VELF                 3327 3281 3560 3400 3714 3500 4208 3737 4476 3881
VELF                 4935 4081 5393 4281 5999 4500
SPNT    3802800    2800.0    507928   4264341       761
VELF    3802800    0    6 1575  208 1706  321 1793  482 1862  643 1950
VELF                  762 1975  911 2018 1024 2062 1173 2118 1274 2150
VELF                 1446 2206 1577 2237 1720 2318 1827 2368 1946 2437
VELF                 2185 2581 2393 2700 2595 2831 2768 2937 3125 3156
VELF                 3327 3281 3560 3400 3714 3500 4208 3737 4476 3881
VELF                 4935 4081 5393 4281 5999 4500
SPNT    3802820    2820.0    507701   4264787       761
VELF    3802820    0    6 1556  137 1650  292 1756  518 1875  655 1931
VELF                  762 1975  911 2031 1113 2104 1298 2156 1464 2206
VELF                 1560 2237 1756 2331 1923 2400 2018 2462 2268 2600
VELF                 2327 2662 2589 2837 2839 3031 2970 3112 3248 3241
VELF                 3685 3462 4024 3654 4450 3861 4959 4097 5487 4311
VELF                 5954 4474
SPNT    3802840    2840.0    507474   4265232       761
VELF    3802840    0    6 1556  161 1656  244 1712  333 1781  452 1850
VELF                  690 1937  810 2000  899 2012  994 2031 1310 2150
VELF                 1470 2200 1583 2262 1762 2337 1940 2400 2048 2450
VELF                 2214 2562 2327 2656 2423 2718 2524 2793 2673 2887
VELF                 2994 3056 3179 3193 3411 3300 3756 3487 4143 3700
VELF                 4542 3918 4923 4074 5548 4331 5999 4500
SPNT    3802860    2860.0    507247   4265678       761
VELF    3802860    0    6 1556  208 1693  393 1818  565 1887  732 1950
VELF                  881 2012 1054 2068 1277 2156 1428 2222 1560 2268
VELF                 1661 2299 1786 2350 1970 2425 2301 2635 2651 2842
VELF                 3008 3056 3208 3175 3345 3248 3832 3499 4101 3650
VELF                 4244 3731 4452 3850 4714 3981 5089 4142 5508 4311
VELF                 5999 4500
SPNT    3802880    2880.0    507020   4266123       761
VELF    3802880    0    6 1575  226 1731  357 1800  470 1856  577 1900
VELF                  810 1987  929 2037 1024 2087 1292 2168 1458 2231
VELF                 1655 2293 1786 2356 1976 2443 2119 2525 2351 2668
VELF                 2506 2743 2714 2875 2940 3006 3149 3162 3470 3362
VELF                 3798 3537 4185 3737 4804 4012 5274 4212 5999 4500
SPNT    3802900    2900.0    506793   4266569       761
VELF    3802900    0    6 1575  226 1731  357 1800  470 1856  577 1900
VELF                  810 1987  929 2037 1024 2087 1292 2168 1458 2231
VELF                 1655 2293 1786 2356 1976 2443 2119 2525 2351 2668
VELF                 2506 2743 2714 2875 2940 3006 3149 3162 3470 3362
VELF                 3798 3537 4185 3737 4804 4012 5274 4212 5999 4500
=========================================================
外推成如下:
(红色为外推点第一点3800900,900,坐标 (529493   4222018也是由3802800和3802780的外推而来,最末一点3803780    3780.0,坐标(496805   4286171)也是由3802880和3802900外推而来.)
(紫色所示则是直接用邻近点的数据,外推第一点(3800900,900)点用的是(3802780    2780.0)点的,外推最末一点(3803780    3780.0)是用3802880,2880)的数据.不用外推
SPNT    3800900     900.0    529493   4222018       761
VELF    3800900    0    6 1575   208 1706   321 1793   482 1862  643 1950
VELF                      762 1975   911 2018 1024 2062 1173 2118 1274 2150
VELF                     1446 2206 1577 2237 1720 2318 1827 2368 1946 2437
VELF                     2185 2581 2393 2700 2595 2831 2768 2937 3125 3156
VELF                     3327 3281 3560 3400 3714 3500 4208 3737 4476 3881
VELF                     4935 4081 5393 4281 5999 4500

SPNT    3802780    2780.0    508155   4263896       761
VELF    3802780    0    6 1575  208 1706  321 1793  482 1862  643 1950
VELF                  762 1975  911 2018 1024 2062 1173 2118 1274 2150
VELF                 1446 2206 1577 2237 1720 2318 1827 2368 1946 2437
VELF                 2185 2581 2393 2700 2595 2831 2768 2937 3125 3156
VELF                 3327 3281 3560 3400 3714 3500 4208 3737 4476 3881
VELF                 4935 4081 5393 4281 5999 4500
SPNT    3802800    2800.0    507928   4264341       761
VELF    3802800    0    6 1575  208 1706  321 1793  482 1862  643 1950
VELF                  762 1975  911 2018 1024 2062 1173 2118 1274 2150
VELF                 1446 2206 1577 2237 1720 2318 1827 2368 1946 2437
VELF                 2185 2581 2393 2700 2595 2831 2768 2937 3125 3156
VELF                 3327 3281 3560 3400 3714 3500 4208 3737 4476 3881
VELF                 4935 4081 5393 4281 5999 4500
SPNT    3802820    2820.0    507701   4264787       761
VELF    3802820    0    6 1556  137 1650  292 1756  518 1875  655 1931
VELF                  762 1975  911 2031 1113 2104 1298 2156 1464 2206
VELF                 1560 2237 1756 2331 1923 2400 2018 2462 2268 2600
VELF                 2327 2662 2589 2837 2839 3031 2970 3112 3248 3241
VELF                 3685 3462 4024 3654 4450 3861 4959 4097 5487 4311
VELF                 5954 4474
SPNT    3802840    2840.0    507474   4265232       761
VELF    3802840    0    6 1556  161 1656  244 1712  333 1781  452 1850
VELF                  690 1937  810 2000  899 2012  994 2031 1310 2150
VELF                 1470 2200 1583 2262 1762 2337 1940 2400 2048 2450
VELF                 2214 2562 2327 2656 2423 2718 2524 2793 2673 2887
VELF                 2994 3056 3179 3193 3411 3300 3756 3487 4143 3700
VELF                 4542 3918 4923 4074 5548 4331 5999 4500
SPNT    3802860    2860.0    507247   4265678       761
VELF    3802860    0    6 1556  208 1693  393 1818  565 1887  732 1950
VELF                  881 2012 1054 2068 1277 2156 1428 2222 1560 2268
VELF                 1661 2299 1786 2350 1970 2425 2301 2635 2651 2842
VELF                 3008 3056 3208 3175 3345 3248 3832 3499 4101 3650
VELF                 4244 3731 4452 3850 4714 3981 5089 4142 5508 4311
VELF                 5999 4500
SPNT    3802880    2880.0    507020   4266123       761
VELF    3802880    0    6 1575  226 1731  357 1800  470 1856  577 1900
VELF                  810 1987  929 2037 1024 2087 1292 2168 1458 2231
VELF                 1655 2293 1786 2356 1976 2443 2119 2525 2351 2668
VELF                 2506 2743 2714 2875 2940 3006 3149 3162 3470 3362
VELF                 3798 3537 4185 3737 4804 4012 5274 4212 5999 4500
SPNT    3802900    2900.0    506793   4266569       761
VELF    3802900    0    6 1575  226 1731  357 1800  470 1856  577 1900
VELF                  810 1987  929 2037 1024 2087 1292 2168 1458 2231
VELF                 1655 2293 1786 2356 1976 2443 2119 2525 2351 2668
VELF                 2506 2743 2714 2875 2940 3006 3149 3162 3470 3362
VELF                 3798 3537 4185 3737 4804 4012 5274 4212 5999 4500
SPNT    3803780    3780.0    496805   4286171       761
VELF    3803780
  0    6 1575  226 1731  357 1800  470 1856  577 1900
VELF                  810 1987  929 2037 1024 2087 1292 2168 1458 2231
VELF                 1655 2293 1786 2356 1976 2443 2119 2525 2351 2668
VELF                 2506 2743 2714 2875 2940 3006 3149 3162 3470 3362
VELF                 3798 3537 4185 3737 4804 4012 5274 4212 5999 4500
===========================================
由于原始文本太大,..附件中只有部分原始文本 和“理想的”输出文本 ..

[ 本帖最后由 No.92 于 2008-4-23 04:51 编辑 ]

文本.rar

14.03 KB, 下载次数: 12

原始文本和输出结果文本

论坛徽章:
0
2 [报告]
发表于 2008-04-23 07:00 |只看该作者
什么意思?这个原始数据到结果的规则,我是看不懂

论坛徽章:
0
3 [报告]
发表于 2008-04-23 10:04 |只看该作者
what means out push?
how did you get  (3800900     900.0) from (3802780    2780.0)
and how did you get  (529493   422201 from (508155   4263896 )
what's the relation of them

论坛徽章:
0
4 [报告]
发表于 2008-04-23 12:13 |只看该作者
看了半天,最后花了个坐标图才知道楼主意思……

  1. #!/bin/awk -f xx file file

  2. BEGIN{
  3.        x=0;outx=3800900;outy=900;OFS="\t"
  4.       }
  5. NR==1{
  6.        a=$2;b=$3;c=$4;d=$5
  7.      }
  8. NR>1{
  9.     if(NF==6&&x==0){
  10.                    x=$2-a;y=$3-b;x1=c-$4;y1=$5-d
  11.                    }
  12.     }
  13. NR>FNR&&FNR==1{
  14.               for(i=outx;i<a;i+=x){
  15.                                    print "SPNT",i,outy,(c+(a-i)/x*x1),(d-(a-i)/y*y1),"761";outy+=y
  16.                                   }
  17.               }
复制代码


为了好看分下列……

以上只是扩展3800900-38002780之间的SPNT行。插入velf行个人感觉再写个命令往里插比较好(一次awk太麻烦)
扩展3803780那个差不多就不写了
ps:这里算的y轴坐标和楼主给的不一样……

再ps:最近三楼特别喜欢用e文……

[ 本帖最后由 galford433 于 2008-4-23 12:58 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-04-23 12:34 |只看该作者
原帖由 galford433 于 2008-4-23 12:13 发表
看了半天,最后花了个坐标图才知道楼主意思……

awk 'BEGIN{x=0;outx=3800900;outy=900;OFS="\t"}NR==1{a=$2;b=$3;c=$4;d=$5}NR>1{if(NF==6&&x==0){x=$2-a;y=$3-b;x1=c-$4;y1=$5-d}}NR>FNR&&FNR==1{for(i=outx;i

a interview beat me

论坛徽章:
0
6 [报告]
发表于 2008-04-23 12:39 |只看该作者
begin with  trying  write it down .
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP