gpt4 book ai didi

linux - 从一个表中的多行获取输出

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:18 24 4
gpt4 key购买 nike

我有一个文件如下:

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:

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

  2. 它会查找包含单词 NUMPRE (/NUMPRE/) 的行,如果找到,则会将变量 nextrec 设置为 1 (nextrec=1)。

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

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

  5. 最后,如果我们命中包含 END (/END/) 的记录,则打印所需的输出(print "NUMBER="num"; TYPE="ty"; NUMPRE="nump";")

关于linux - 从一个表中的多行获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44006414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com