gpt4 book ai didi

bash - 如何使用 awk 仅获取包含精确元素的部分

转载 作者:行者123 更新时间:2023-11-29 09:27:35 26 4
gpt4 key购买 nike

我正在尝试进行一些文本处理,但无法弄清楚,问题是:

我有一个如下所示的文件:

ORANGE{  
a
b
c
CI 123
d
e
f
g
}

APPLE{
1
2
3
4
5
CI 123
6
7
}

ORANGE{
A
B
C
CI 321
D
E
}
ORANGE{
hell
CI 123
ABCD 1234
hmmm
}

awk '/ORANGE {/{sho=1} ;/^CI 123$/{sho=1} ;/^}$/{sho=0} sho ' 文件

我试过上面的代码,但它并没有给我我想要的东西,而是给了我所有的橙色部分。我广泛搜索但没有找到任何相关信息。谢谢。

最佳答案

$ cat temp 
ORANGE{
...
CI 123
...
}

APPLE{
...
CI 123
...
}

ORANGE{
...
CI 321
...
}
ORANGE{
...
CI 123
ABCD 1234
...
}
$ awk '/ORANGE/ {o=1;p=0} {if(o)arr[i++]=$0} /CI 123/ {if(o){for(key in arr) print arr[key];p=1}else{p=0} delete arr;i=0;next;} /}/ {if(p)print;p=0;delete arr;i=0;o=0;} o && p' temp
ORANGE{
...
CI 123
...
}
ORANGE{
...
CI 123
ABCD 1234
...
}

这是一个脚本文件中相同的 awk 逻辑,具有漂亮的标识:

/ORANGE/ {
o=1
p=0
}
{
if(o)
arr[i++]=$0
}
/CI 123/ {
if(o)
{
for(key in arr)
print arr[key]
p=1
}
else
p=0
delete arr
i=0
next
}
/}/ {
if(p)
print
p=0
delete arr
i=0
o=0
}
o && p

我们可以像这样使用 awk 的脚本文件:

$ awk -f script.awk temp
ORANGE{
...
CI 123
...
}
ORANGE{
...
CI 123
ABCD 1234
...
}

Edit1:自定义数据

$ cat temp 
ORANGE{
a
b
c
CI 123
d
e
f
g
}

APPLE{
1
2
3
4
5
CI 123
6
7
}

ORANGE{
A
B
C
CI 321
D
E
}
ORANGE{
hell
CI 123
ABCD 1234
hmmm
}

$ awk '/ORANGE/ {o=1;p=0} {if(o)arr[i++]=$0} /CI 123/ {if(o){for(key in arr) print arr[key];p=1}else{p=0} delete arr;i=0;next;} /}/ {if(p)print;p=0;delete arr;i=0;o=0;} o && p' temp
ORANGE{
a
b
c
CI 123
d
e
f
g
}
ORANGE{
hell
CI 123
ABCD 1234
hmmm
}

关于bash - 如何使用 awk 仅获取包含精确元素的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38044620/

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