记录分隔符中的 awk 和美元符号

标签 awk gawk

我正在尝试解析一个文件,无论出于何种原因,字符串“&($)”作为记录分隔符,“(@)$”作为字段分隔符。我无法通过在 BEGIN block 中将它们指定为 RS 和 FS 来解析文件。我正在使用 gnu awk 3.1.7,它提示说存在语法错误,但找不到如何转义美元符号(假设这是它不喜欢的)。

$ awk 'BEGIN{FS="(@)$" RS="&($)"} {} END{print NR}' some-file.txt
awk: BEGIN{FS="(@)$" RS="&($)"} {} END{print NR}
awk:                   ^ syntax error

感谢专家的帮助。

谢谢, 克

最佳答案

你需要在正则表达式中转义那些具有特殊含义的字符。

kent$  cat f                                               
foo(@)$bar(@)$blah&($)foo2(@)$bar2(@)$blah2

kent$  awk 'BEGIN{FS="\\(@\\)\\$";RS="&\\(\\$\\)"}{print NR,NF}' f
1 3
2 3

关于记录分隔符中的 awk 和美元符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20667022/

相关文章:

bash - sed 命令替换具有特殊字符 "&"的字符串

linux - 如何使用 AWK 或 SED 提取值大于数字的字段

Linux - 多行 gawk 行号

linux - Bash 和 awk - 在进行多行模式数学运算时如何将变量传递给 awk?

bash - awk:保留具有最高值的记录,比较那些共享其他字段的记录

linux - awk 中的 printf 格式说明符不适用于多个参数

replace - Awk:用另一个文件中的一列替换一个文件中的列

awk - 如何打印出 AWK 中的特定字段?

windows - 将 awk 结果重定向到文本文件