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

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

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

$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'

然后使用以下命令打印每个记录的第一个字段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

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

first record, first field
second record, first field#

答案1

这是执行此操作的一种方法awk

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

技巧是将记录分隔符设置为任何一个文件的开头 ( ^) 或换行符,后跟#和另一个换行符\n


相关内容