在awk中使用多个字符字符串作为分隔符

4

我有一个文本文件,其中记录格式如下:

A||o||BCD||o||E||o||XYZ

我想使用“||o||”作为分隔符来获取我的记录:

但是当我使用:

awk -F'||o||' '{print $1}'

我遇到了以下错误:

awk: 在 |o|| 处,正则表达式中出现非法的主元素 ||o||

非常感谢任何帮助。

相关:https://dev59.com/yanka4cB1Zd3GeqPIx3D ... 相同的分隔符 ;) - Sundeep
我在使用GNU awk时没有遇到错误。建议您在问题中添加awk版本信息。 - Sundeep
1
这些使用 ||o|| 作为分隔符的文件是从哪里来的???我一直在这个论坛上看到它们被提到。 - Ed Morton
1个回答

4

您需要在正则表达式中转义管道符号

awk -F'[|][|]o[|][|]' '{print $1}'

或者

awk -F'[|]{2,2}o[|]{2,2}' '{print $1}'

在awk中,通常的反斜杠转义不同,因此要使用它(至少在GNU bash版本4.3.42上)

awk 'BEGIN{FS="\\|\\|o\\|\\|"} {print $1}' pipe.txt

还有这个丑陋的语法,使用-F选项

awk -F "\\\|\\\|o\\\|\\\|" '{print $1}' pipe.txt

双重转义在这里有很好的解释。


1
Luis,在我的系统上,awk -F'\|\|\o\|\|' '{print $1}' 不起作用,但是 awk -F'[|][|]o[|][|]' '{print $1}'awk -F'[|]{2,2}o[|]{2,2}' '{print $1}' 可以。如果你去掉第一个,我会给你的解决方案点赞。 - Pierre François
@Luis Muñoz:我冒昧地删除了你的第一个解决方案,因为它不起作用,但我保留了第二个和第三个。 - Pierre François
非常感谢。我在答案的末尾添加了更多关于此的信息。 - LMC
@Luis Muñoz:很高兴与您合作。 - Pierre François

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接