从单个表中的多行获取输出

时间:2017-05-16 16:05:23

标签: linux awk

我有一个文件如下:

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;

2 个答案:

答案 0 :(得分:0)

这是满口的,但它有效。

 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:

  1. 如果找到与"number="匹配的记录(/number=/,则它会以等号或分号分隔记录,并将其存储在数组a中{{1}然后,它将数组的第二个元素放入变量split($0, a, "[=;]");nump)。

  2. 如果找到包含单词nump=a[2]NUMPRE)的行,则会将变量/NUMPRE/设置为1(nextrec)。< BR />

  3. 如果nextrec=1设置为1且记录中不包含空格(nextrec),请将变量nextrec==1 && /[^ ]/设置为行(num)。

  4. 如果该行以num=$0nump)中存储的内容开头,则将该记录的第二个字段存储在变量$1==numpty)中。

  5. 最后,如果我们点击包含ty=$2END)的记录,则打印所需的输出(/END/

答案 1 :(得分:0)

使用GNU awk进行多字符RS:

$ awk -v RS='\n\n\n' -v OFS='; ' -v ORS=';\n' '{print $7"="$10, $8"="$11, $12"="$13 }' file
NUMBER=49090005940; TYPE=IN; NUMPRE=1117230111;
NUMBER=49090005942; TYPE=IN; NUMPRE=1117230111;