Awk和美元签到记录分隔符

Kum*_*arM 3 awk gawk

我试图解析一个文件,无论出于什么原因,字符串"&($)"作为记录分隔符,"(@)$"作为字段分隔符.我无法通过在BEGIN块中将这些指定为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
Run Code Online (Sandbox Code Playgroud)

感谢专家的帮助.

谢谢,K

Ken*_*ent 6

你需要逃避那些在正则表达式中具有特殊意义的字符.

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

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