免费注册 查看新帖 |

Chinaunix

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

请帮忙,简单的awk代码分析. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-04 09:44 |只看该作者 |倒序浏览
以下一段awk代码是用来分析dxf格式的文件的,
dxf文件格式大概是这样:
...
TEXT
  8
2
10
747.16
20
273.75
40
  10.00
  1
#-25
  0
TEXT
  8
2
10
748.23
20
272.15
40
  10.00
  1
#-26
  0
LINE
  8
8
10
750.09
20
279.58
11
751.65
21
277.70
  0
TEXT
  8
2
10
750.09
20
279.58
40
  10.00
  1
#-27
  0
TEXT
  8
2
10
751.65
20
277.70
40
  10.00
  1
#-28
  0
LINE
  8
8
10
750.09
20
273.09
11
752.93
21
274.79
  0
TEXT
  8
2
10
750.09
20
273.09
..........



使用方式$andxf.awk filenam.dxf ,功能是抽取一些必要的信息出来,但是我看来看去也看不明白,谁能给我简单注解一下?"#"后面是我的问题,


  1. awk '
  2.         BEGIN {
  3.                 TXT_no=-1 #这里TXT_no的值是-1
  4.                 Str=""
  5.         }


  6.         {
  7.                 if( TXT_no != -1 )
  8.                         ++TXT_no #这里TXT_no的值是多少?

  9.                 if( $0 == "TEXT" )
  10.                         TXT_no=0

  11.                 if( TXT_no == 2)  #这里能到达吗?
  12.                         S2=$0

  13.                 if( TXT_no == 18){
  14.                         S18=$0

  15.                         if( S2 == 19){       
  16.                         # the second line below the line with "TEXT" is a
  17.                         # flage, if the value is "19", means this section
  18.                         # is used for the text in paper patten.
  19.                         # if the value is "1", there is another meaning.

  20.                                 gsub( " *\^\^* *\~\~*", "^ ", S18)
  21.                                 gsub( " *\~\~* *\^\^*", "~ ", S18)
  22.                                 gsub( " *\^ *", "^ ", S18)
  23.                                 gsub( " *\~ *", "~ ", S18)

  24.                                 Str=sprintf("%s:%s", Str, S18)
  25.                         }
  26.                         else{
  27.                                 split(S18, s, ":")
  28.                                 if ( s[1] == "Annotation" ){
  29.                                         PC=s[2]
  30.                                         printf ("%s%s\n", PC, Str)
  31.                                         TXT_no=-1
  32.                                         Str=""
  33.                                 }
  34.                         }
  35.                 }
  36.         }
  37. ' $1
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-11-04 12:43 |只看该作者

请帮忙,简单的awk代码分析.

study

论坛徽章:
0
3 [报告]
发表于 2004-11-04 12:52 |只看该作者

请帮忙,简单的awk代码分析.

if( TXT_no != -1 )
         ++TXT_no #这里TXT_no的值是多少? ->从“TEXT”标志行开始每读文件的一行加1,直到下一个“TEXT”标志

      if( $0 == "TEXT" )
         TXT_no=0

      if( TXT_no == 2)  #这里能到达吗? -〉从“TEXT”标志行开始读第3行时到达
         S2=$0

论坛徽章:
0
4 [报告]
发表于 2004-11-04 13:50 |只看该作者

请帮忙,简单的awk代码分析.

  1. awk '
  2.    BEGIN {
  3.       TXT_no=-1 #初始化TXT_no,本程序是以"TEXT"为标识,形成多个片断,此变量是用来对片断内进行计数的
  4.       Str=""
  5.    }


  6.    {
  7.       if( TXT_no != -1 )
  8.          ++TXT_no        #对于第一次遇到"TEXT"之前,TXT_no一直是-1,一旦遇到TEXT后,计数开始

  9.       if( $0 == "TEXT" )
  10.          TXT_no=0     #遇见TEXT后,计数归0

  11.       if( TXT_no == 2)  #这里能到达吗?
  12.          S2=$0
复制代码

论坛徽章:
0
5 [报告]
发表于 2004-11-04 15:55 |只看该作者

请帮忙,简单的awk代码分析.

谢谢几位,明白了许多,但是还有不明白的地方.


  1. if( TXT_no != -1 )
  2.          ++TXT_no        #对于第一次遇到"TEXT"之前,TXT_no一直是-1,一旦遇到TEXT后,计数开始

  3.       if( $0 == "TEXT" )
  4.          TXT_no=0     #遇见TEXT后,计数归0
复制代码

好象有点矛盾啊,比如读到第一个"TEXT"记录时,TXT_no=0, 但是前面又说,一旦遇到TEXT后,计数开始 ?还是不大明白
.


这个程序用来分析ASCII DXF格式的,我在这里放上一个完整的DXF文件,
大家可试验一下.
http://home.netvigator.com/~fritzyau/LZBNEW.dxf
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP