免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: neoion
打印 上一主题 下一主题

请教各位前辈,关于如何使用awk计算输出DNS地址的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-10-25 01:43 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

wmjie前辈,是这样的,我思考了之后,发现现在困扰我的问题在这里

第一个,如何用awk去读取一个文件里的指定字符串(一大段),例如下边的

; extrait de etu.info.unicaen.fr

etu.info.unicaen.fr.    IN      SOA     calvin.info.unicaen.fr. postmaster.info.unicaen.fr. (
                        2005100400        ; Serial
                        21600         ; Refresh
                        3600         ; Retry
                        3600000         ; Expire
                        86400 )       ; Negative Cache TTL

;-----------------------------------------------------------------------------------------


然后打印出如下格式

@       IN      SOA     calvin.info.unicaen.fr. postmaster.info.unicaen.fr. (
    2005101200; Serial
                          21600         ; Refresh
                           3600         ; Retry
                        3600000         ; Expire
                          86400 )       ; Negative Cache TTL


第二个,

这里

fork            A               10.130.4.31

这里的10.130.4.31是在$3的位置上吗?

如果要读取这个IPv4的值,我该把什么作为一个判定标准呢?此处 A是IPv4的标志,但是IPv6的标志是AAAA,是不是要用$2=="A"来作为读取$3的标志?

还有就是读取了10.130.4.31之后,我该怎么做才能让这四组数字前三组数字反转排序,并输出为4.130.10.in-addr.arpa. 的形式?

第三个,
在文件中
fork                AAAA                2001:660:7101:1:220:edff:fe9e:4fd3

这里,如何把2001:660:7101:1:220:edff:fe9e:4fd3格式更改为

2001:0660:7101:0001:0220:edff:fe9e:4fd3

并输出为1.0.0.0.1.0.1.7.0.6.6.0.1.0.0.2.ip6.arpa.



上边三个问题,小生实在想不通,还请各位高手前辈多多指点,先谢谢了



附上读取的源文件

===================================

; extrait de etu.info.unicaen.fr

etu.info.unicaen.fr.    IN      SOA     calvin.info.unicaen.fr. postmaster.info.unicaen.fr. (
                        2005100400        ; Serial
                        21600         ; Refresh
                        3600         ; Retry
                        3600000         ; Expire
                        86400 )       ; Negative Cache TTL

;-----------------------------------------------------------------------------------------
; Serveurs DNS
;-----------------------------------------------------------------------------------------

@        IN        NS        calvin.info.unicaen.fr.
@       IN      NS      bleuet.info.unicaen.fr.

;-----------------------------------------------------------------------------------------
; Serveur de Courrier
;-----------------------------------------------------------------------------------------

@        IN        MX        10 averell.info.unicaen.fr.

;-----------------------------------------------------------------------------------------
; Alias
;-----------------------------------------------------------------------------------------

ldaps                CNAME        ldaps.info.unicaen.fr.                ; serveur ldap(s)
ntp                CNAME        ntp.info.unicaen.fr.                ; serveur de date
time                CNAME        ntp.info.unicaen.fr.                ; serveur de date

; serveur de mail
smtp            CNAME   smtp.info.unicaen.fr.
lists                    CNAME   smtp.etu.info.unicaen.fr.        ; listes de diffusion
imap                     CNAME   smtp.etu.info.unicaen.fr.        ; server IMAP
pop                      CNAME   smtp.etu.info.unicaen.fr.        ; server POP
mail                CNAME   smtp.etu.info.unicaen.fr.        ; vhost http
ftp                CNAME        ftp.info.unicaen.fr.                ; serveur FTP anonyme
print-server    CNAME          print-server.info.unicaen.fr.                ; serveur d'impression
proxy                CNAME   proxy.info.unicaen.fr.                ; serveur proxy http / ftp

;-----------------------------------------------------------------------------------------
; Virtual Host du serveur HTTP
;----------------------------------------------------------------------------------------

www             CNAME   www.info.unicaen.fr.          ; http://www.etu.info.unicaen.fr
sysadmin        CNAME   sysadmin.info.unicaen.fr.        ; http://sysadmin.etu.info.unicaen.fr
doc                CNAME   doc.info.unicaen.fr.                ; serveur de documentations etudiantes
users                CNAME   users.info.unicaen.fr.                ; serveur des pages personnelles

;-----------------------------------------------------------------------------------------
; Alias serveurs NFS (users et logiciels)
;----------------------------------------------------------------------------------------

nfs-info        CNAME   nfs-info.info.unicaen.fr.        ; serveur de disques raid
nfs-etu                CNAME   nfs-etu.info.unicaen.fr.        ; serveur de disques raid
nfspub                CNAME        nfspub.info.unicaen.fr.                ; serveur de disques /import/pub/{an,mois,semaine}
nfslocal        CNAME   nfslocal.info.unicaen.fr.        ; serveur de disques /import/local

;-----------------------------------------------------------------------------------------
; Machines linux 10.130.4.x
;----------------------------------------------------------------------------------------

fork            A               10.130.4.31
fork                AAAA                2001:660:7101:1:220:edff:fe9e:4fd3
fork                TXT                "kitchen : S3-404"
knife           A               10.130.4.32
knife                AAAA                2001:660:7101:1:220:edff:fe9e:1d1a
knife                TXT                "kitchen : S3-404"
spoon           A               10.130.4.33
spoon                AAAA                2001:660:7101:1:220:edff:fe9e:ac07
spoon                TXT                "kitchen : S3-404"
plate           A               10.130.4.34
plate                AAAA                2001:660:7101:1:220:edff:fe9f:b082
plate                TXT                "kitchen : S3-404"
glass           A               10.130.4.35
glass                AAAA                2001:660:7101:1:220:edff:fe9f:a7b7
glass                TXT                "kitchen : S3-404"
pan                  A               10.130.4.36
pan                AAAA                2001:660:7101:1:220:edff:fe9f:ad3b
pan                TXT                "kitchen : S3-404"
table           A               10.130.4.37
table                AAAA                2001:660:7101:1:220:edff:fe9e:742b
table                TXT                "kitchen : S3-404"
chair           A               10.130.4.38
chair                AAAA                2001:660:7101:1:220:edff:fe9e:1b86
chair                TXT                "kitchen : S3-404"
towel                A                10.130.4.39
towel                AAAA                2001:660:7101:1:220:edff:fe9e:7652
towel                TXT                "kitchen : S3-404"
whip                A                10.130.4.40
whip                AAAA                2001:660:7101:1:220:edff:fe9e:4fd4
whip                TXT                "kitchen : S3-404"

=========================================

论坛徽章:
0
12 [报告]
发表于 2005-10-25 04:44 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

第三个问题关于补齐000的位置,我刚刚查了以前的文档,看到有一个命令


-F \ | `{printf"%04d/n", $1,$2}

但是这里我不明白如何才能让它去读取在":"中的这组数,这些字符串又是怎么定位的呢?

用FS=":"把冒号去掉,然后把这组数重新定位为$3到$7吗?

这句该怎么写呢?

恳请高手前辈们的指点

ps,还想请问前辈,是在原文件中删除无用的行,还是选择把目标行选取到一个新文件中输出

这两种方式,哪一种效率更高呢?

论坛徽章:
0
13 [报告]
发表于 2005-10-25 20:27 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

期待各位前辈指点:)

论坛徽章:
0
14 [报告]
发表于 2005-10-25 22:58 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

2.

  1. awk '{if($2=="A"){split($3,tmp,".");printf("%s\t%s.%s.%s.in-addr.arpa.\n",$1,tmp[3],tmp[2],tmp[1])}}' txt
复制代码


3

  1. awk '{if($2=="AAAA"){split($3,tmp,":");for(i=1;i<=8;i++){printf("%04s:",tmp[i])}printf("\n")}}' txt
复制代码


前辈不敢当。我也是刚学shell不久。
第三个问题,后面的那个转换,我没看明白有什么规律。
第一个问题,是不是只是固定的打上面的那几句话?

论坛徽章:
0
15 [报告]
发表于 2005-10-25 23:29 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

先在这里谢谢wmjie前辈的指点了,小生初来乍到,诸位自然都是我学习的榜样,前辈这一称呼,不足为过:)

对了,说到第三个问题

开始我也没发现规律,后来才发现

这里,2001:660:7101:1:220:edff:fe9e:4fd3格式更改为

2001:0660:7101:0001:0220:edff:fe9e:4fd3之后

为了输出得到1.0.0.0.1.0.1.7.0.6.6.0.1.0.0.2.ip6.arpa.

先取2001:0660:7101:0001

然后,先把冒号去掉,再每一个数字之后加句点。就可以得到并输出为1.0.0.0.1.0.1.7.0.6.6.0.1.0.0.2.ip6.arpa.

论坛徽章:
0
16 [报告]
发表于 2005-10-25 23:33 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

原帖由 "wmjie" 发表:


第一个问题,是不是只是固定的打上面的那几句话?



是选取固定的一段,但是把第一行的$1换为"@"

而且要包括分号后边的内容

例如

21600         ; Refresh

论坛徽章:
0
17 [报告]
发表于 2005-10-25 23:54 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

3.

  1. awk '{if($2=="AAAA")
  2.         {
  3.                 split($3,tmp,":");
  4.                 for(i=1;i<=8;i++)
  5.                 {
  6.                         str_tmp=sprintf("%04s:",tmp[i]);
  7.                         str_ip=str_ip""str_tmp;
  8.                 }
  9.                 for(j=19;j>=1;j--)
  10.                 {
  11.                         char=substr(str_ip,j,1);
  12.                         if(char!=":")
  13.                         {
  14.                                 str_arp=str_arp""char".";
  15.                         }
  16.                 }
  17.                 printf("%s\n%sip6.arpa.\n",str_ip,str_arp);
  18.                 str_tmp="";
  19.                 str_ip="";
  20.                 char="";
  21.                 str_arp="";
  22.         }
  23. }' txt
复制代码


1.

  1. awk '/calvin.info.unicaen.fr. postmaster.info.unicaen.fr./{
  2.         printf( "@\t" );
  3.         for( i=2; i<=NF; i++)
  4.         {
  5.                 printf( "%s\t", $i );
  6.         }
  7.         printf( "\n" );
  8.         flag = 5;
  9.         next;
  10.         }
  11.         {if( flag >= 1 )
  12.         {
  13.                 print $0;
  14.                 flag--;
  15.         }
  16. }' txt
复制代码

论坛徽章:
0
18 [报告]
发表于 2005-10-26 17:22 |只看该作者

请教各位前辈,关于如何使用awk计算输出DNS地址的问题

十分感谢wmjie对我初学Unix的帮助,正在研究并完成整个任务:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP