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