0

私はこのデータをテキストファイルに持っています。テンプレートに入れるために変換する必要があること

data.txt

*   A   11.22.33.44
mail    A   11.22.33.44
domain1.com     A   11.22.33.44
ftp     CNAME   domain1.com
www     CNAME   domain1.com
domain1.com MX mail.domain1.com

*   A   55.66.77.88
mail    A   55.66.77.88
domain2.com     A   55.66.77.88
ftp     CNAME   domain2.com
www     CNAME   domain2.com
domain2.com MX mail.domain2.com

このvimコマンドで実行する

:g/NS/d | :%s/CNAME/cnamerecord/g | :%s/A/arecord/g | :%s/MX/mxrecord/g

次のように変更します。

arecord *                11.22.33.44
arecord mail             11.22.33.44
arecord domain1.com      11.22.33.44
ftp     cnamerecord     domain1.com
www     cnamerecord     domain1.com
domain1.com mxrecord mail.domain1.com

arecord *         55.66.77.88
arecord mail             55.66.77.88
arecord domain2.com             55.66.77.88
ftp     cnamerecord     domain2.com
www     cnamerecord     domain2.com
domain2.com mxrecord mail.domain2.com

今、私はAWKコマンドを実行します

cat data.txt |
awk '{if ($2 == "arecord") print $2 " " $1 " " $3}
     {if ($2 == "cnamerecord") print $2 " " $1 "." $3 " " $3}
     {if ($2 == "mxrecord") print $2 " " $1 " " $3}'

出力は次のとおりです。

arecord * 11.22.33.44
arecord mail 11.22.33.44
arecord domain1.com 11.22.33.44
cnamerecord ftp.domain1.com domain1.com
cnamerecord www.domain1.com domain1.com
mxrecord domain1.com mail.domain1.com
arecord * 55.66.77.88
arecord mail 55.66.77.88
arecord domain2.com 55.66.77.88
cnamerecord ftp.domain2.com domain2.com
cnamerecord www.domain2.com domain2.com
mxrecord domain2.com mail.domain2.com

ここで、次の 2 つの問題があります。

問題 1 と私の最大の頭痛の種: データ間のスペースを維持するにはどうすればよいか。保持したいファイルに空白行があります。

問題#2(ボーナスポイント):私のAWKコードでは、arecordを次のように表示したい:

arecord *.domain1.com 55.66.77.88
arecord mail.domain1.com 55.66.77.88
arecord domain1 55.66.77.88

いいえ:

arecord * 11.22.33.44
arecord mail 11.22.33.44
arecord domain1.com 11.22.33.44

最終的な理想的な出力は次のようになります

arecord *.domain1.com 11.22.33.44
arecord mail.domain1.com 11.22.33.44
arecord domain1.com 11.22.33.44
cnamerecord ftp.domain1.com domain1.com
cnamerecord www.domain1.com domain1.com
mxrecord domain1.com mail.domain1.com

arecord *.domain2.com 55.66.77.88
arecord mail.domain2.com 55.66.77.88
arecord domain2.com 55.66.77.88
cnamerecord ftp.domain2.com domain2.com
cnamerecord www.domain2.com domain2.com
mxrecord domain2.com mail.domain2.com

150個のドメインに対してこれを行う必要があります

どんな助けでも素晴らしいでしょう

4

2 に答える 2

2

このようないくつか?

cat file
arecord * 11.22.33.44
arecord mail 11.22.33.44
arecord domain1.com 11.22.33.44
ftp cnamerecord domain1.com
www cnamerecord domain1.com
domain1.com mxrecord mail.domain1.com

arecord * 55.66.77.88
arecord mail 55.66.77.88
arecord domain2.com 55.66.77.88
ftp cnamerecord domain2.com
www cnamerecord domain2.com
domain2.com mxrecord mail.domain2.com

awk コマンド

awk '
/arecord/ && !c { 
    c=NR+2}
NR==c {
    c=0
    print $1 " *." $2,$3 "\n" $1" mail." $2,$3 "\n" $0}
/^ftp|^www/{
    print $2,$1 "." $3,$3}
/mxrecord/ {
    print $2,$1,$3}
!NF {
    print ""}
' file
arecord *.domain1.com 11.22.33.44
arecord mail.domain1.com 11.22.33.44
arecord domain1.com 11.22.33.44
cnamerecord ftp.domain1.com domain1.com
cnamerecord www.domain1.com domain1.com
mxrecord domain1.com mail.domain1.com

arecord *.domain2.com 55.66.77.88
arecord mail.domain2.com 55.66.77.88
arecord domain2.com 55.66.77.88
cnamerecord ftp.domain2.com domain2.com
cnamerecord www.domain2.com domain2.com
mxrecord domain2.com mail.domain2.com

削除するように更新getline

于 2013-09-26T06:44:59.920 に答える