如何在awk中使用^#$作为记录分隔符?

Ern*_*t A 8 awk

你如何告诉 awk#在一行中单独使用一个字符作为记录分隔符?问题是你不能说RS="^#$"因为^匹配文件的开头,而RS="#\n"不是行的开头,并且也不起作用,因为它匹配#不在行开头的字符。

$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'
Run Code Online (Sandbox Code Playgroud)

然后打印每条记录的第一个字段,使用RS="#\n"

$ printf "%s" "$data" | awk '
  BEGIN { RS="#\n"; FS="\n" }
  /./ {print $1}
  '
first record, first field
second record, first field
second record, second field
Run Code Online (Sandbox Code Playgroud)

最后一行是错误的,因为它不是第一个字段而是第二个字段。预期的输出是

first record, first field
second record, first field#
Run Code Online (Sandbox Code Playgroud)

ter*_*don 6

这是一种方法awk

$ printf "%s\n" "$data" | 
    awk -F'\n' -v RS='(^|\n)#\n' '/./ {print $1}' 
first record, first field
second record, first field#
Run Code Online (Sandbox Code Playgroud)

关键是要记录分隔符设置为要么该文件(的开头^),或换行,随后是#与另一换行\n