在awk中使用RS过滤块时如何保留RS
我有以下数据,它是以块的形式出现的。每个块由两种字符串分隔:在awk中使用RS过滤块时如何保留RS,awk,Awk,我有以下数据,它是以块的形式出现的。每个块由两种字符串分隔: 九月一日 九月二日 以下是输入数据: echo "$y" sep1 abc def ghi sep2 jkl mno sep1 pqr sep2 stu sep1 vwx sep2 yz sep1 假设我要删除包含abc的块:我使用了以下命令: echo "$y" |awk -v RS='sep1|sep2' '!/abc/' jkl mno pqr stu vwx yz 它工作,但删除了原来的seperato
echo "$y"
sep1
abc
def
ghi
sep2
jkl
mno
sep1
pqr
sep2
stu
sep1
vwx
sep2
yz
sep1
假设我要删除包含abc
的块:我使用了以下命令:
echo "$y" |awk -v RS='sep1|sep2' '!/abc/'
jkl
mno
pqr
stu
vwx
yz
它工作,但删除了原来的seperator。我如何保存它,以便输出如下:
sep1
sep2
jkl
mno
sep1
pqr
sep2
stu
sep1
vwx
sep2
yz
sep1
再来一次。使用GNU awk和
RT
:
$ awk 'BEGIN{RS="(sep1|sep2)\n"}/abc/{$0="\n"}{ORS=RT;print}' file
sep1
# only 1 empty line like in the expected output
sep2
jkl
...
文档中提到了RT
:
$ awk 'BEGIN{RS="(sep1|sep2)\n"}/abc/{$0="\n"}{ORS=RT;print}' file
sep1
# only 1 empty line like in the expected output
sep2
jkl
...
RT
在每次读取记录时设置。它包含与记录分隔符RS
表示的文本相匹配的输入文本。此变量是一个gawk扩展。另一个go。使用GNU awk和RT
:
$ awk 'BEGIN{RS="(sep1|sep2)\n"}/abc/{$0="\n"}{ORS=RT;print}' file
sep1
# only 1 empty line like in the expected output
sep2
jkl
...
文档中提到了RT
:
$ awk 'BEGIN{RS="(sep1|sep2)\n"}/abc/{$0="\n"}{ORS=RT;print}' file
sep1
# only 1 empty line like in the expected output
sep2
jkl
...
RT
在每次读取记录时设置。它包含与记录分隔符RS
表示的文本相匹配的输入文本。此变量是一个gawk扩展。通过块处理(无RS
模式):
-如果存在且不包含if(r)print(r!~/abc/?r:)
abc
-累加每个块行r=(r?r OR:)$0
输出:
sep1
sep2
jkl
mno
sep1
pqr
sep2
stu
sep1
vwx
sep2
yz
sep1
通过块处理(无RS
模式):
-如果存在且不包含if(r)print(r!~/abc/?r:)
abc
-累加每个块行r=(r?r OR:)$0
输出:
sep1
sep2
jkl
mno
sep1
pqr
sep2
stu
sep1
vwx
sep2
yz
sep1
你好,詹姆斯,谢谢你的回复。但是,这对我没有帮助,因为我需要删除整个块。我所说的块是指当我选择
abc
时,def
和ghi
也应该被删除。由于这三个都是由sep1
和sep2
创建的一个块,所以我的坏消息。已编辑。@JamesBrown+1和我高度怀疑OPs 2分隔符的字面名称是sep1
和sep2
,因此您使用sep1 | sep2
几乎可以肯定是正确的方法,尽管其中任何一个都很容易在必要时进行调整。OP已经将GNU awk用于多字符RS,因此也使用RT是有意义的。谢谢,你知道我能读到的关于RT
的任何资源吗?我建议使用GNU awk文档,特别是4.1.2使用gawk进行记录拆分。测试几次,你已经掌握了它!你好,詹姆斯,谢谢你的回复。但是,这对我没有帮助,因为我需要删除整个块。我所说的块是指当我选择abc
时,def
和ghi
也应该被删除。由于这三个都是由sep1
和sep2
创建的一个块,所以我的坏消息。已编辑。@JamesBrown+1和我高度怀疑OPs 2分隔符的字面名称是sep1
和sep2
,因此您使用sep1 | sep2
几乎可以肯定是正确的方法,尽管其中任何一个都很容易在必要时进行调整。OP已经将GNU awk用于多字符RS,因此也使用RT是有意义的。谢谢,你知道我能读到的关于RT
的任何资源吗?我建议使用GNU awk文档,特别是4.1.2使用gawk进行记录拆分。测试几次,你已经掌握了它!