我有一个如下文件:

number=49090005940;

NUMBER TRANSLATION DATA

NUMBER DATA

NUMBER           TYPE        SUBCOND

49090005940      IN

NUMPRE

1117230111

END


number=49090005942;

NUMBER TRANSLATION DATA

NUMBER DATA

NUMBER           TYPE        SUBCOND

49090005942      IN

NUMPRE

1117230111

END


我想要一个带有“ NUMBER,TYPE和NUMPRE”的输出,如下所示:

NUMBER=49090005940; TYPE=IN; NUMPRE=1117230111;

NUMBER=49090005942; TYPE=IN; NUMPRE=1117230111;

最佳答案

这是一口,但它可以工作。

 awk '/number=/{split($0, a, "[=;]"); nump=a[2]} nextrec==1 && /[^ ]/{num=$0; nextrec=0} /NUMPRE/{nextrec=1} $1==nump{ty=$2} /END/{print "NUMBER="num"; TYPE="ty"; NUMPRE="nump";"}' infile


在这里awk:


如果找到与"number="/number=/)匹配的记录,则将记录以等号或分号分隔,并将其存储在数组asplit($0, a, "[=;]");)中。然后将数组的第二个元素放入变量中numpnump=a[2])。
如果找到,将查找包含单词NUMPRE/NUMPRE/)的行,并将变量nextrec设置为1(nextrec=1)。
如果nextrec设置为1并且记录中不包含空格(nextrec==1 && /[^ ]/),则将变量num设置到行(num=$0)。
如果该行以nump$1==nump)中存储的内容开头,则将该记录的第二个字段存储在变量tyty=$2)中。
最后,如果我们命中了包含END/END/)的记录,则输出所需的输出(print "NUMBER="num"; TYPE="ty"; NUMPRE="nump";"

10-08 13:59