gpt4 book ai didi

regex - gawk - 提取文本并将其放在同一行

转载 作者:行者123 更新时间:2023-12-01 23:19:58 24 4
gpt4 key购买 nike

好的,我有一些文本:

=== Blah 1 ===
::Junk I wish: 2 Ignore <br/>
::More Junk: 1.2-2.7 <br/>
::ABC: [http://www.google.com (STUFF/I/Want)]<br/>
::More2: Ignore<br/>
::More Stuf 2 Ignore: N/A<br/>

=== Blah 2 ===
::Junk I wish: More 2 Ignore <br/>
::More Junk: 1.2-2.7 <br/>
::ABC: [http://www.google.com (Other/STUFF/I/Want)]<br/>
::More2: More Ignore<br/>
::More Stuf 2 Ignore: More N/A<br/>

我要输出:

Blah 1, (STUFF/I/Want)
Blah 2, (Other/STUFF/I/Want)

我已经想出了如何抓取我想要的部分行:

gawk  '/===/ {print } /ABC/ {print $3}' file_name

输出如下:

=== Blah 1 ===
(STUFF/I/Want)]<br/>
=== Blah 2 ===
(Other/STUFF/I/Want)]<br/>

我不明白的是如何去掉我不想要的其他字符,并将其放在一行上。

最佳答案

使用printf代替print省略换行符只打印第一 block 中的第二个和第三个字段并使用sub来在第二个 block 中扔掉你不想要的东西:

awk '/===/{printf "%s %s, ",$2,$3}/ABC/{sub(/].*/,"");print $3}' file
Blah 1, (STUFF/I/Want)
Blah 2, (Other/STUFF/I/Want)

如果标题是可变长度的:

awk '/===/{gsub(/ ?=+ ?/,"");printf "%s, ",$0}/ABC/{sub(/].*/,"");print $3}' file
Blah 1, (STUFF/I/Want)
Blah 2, (Other/STUFF/I/Want)

关于regex - gawk - 提取文本并将其放在同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15326057/

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