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

Modified on: Sat, 30 Jun 2018 06:58:30 +0800

如何告诉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#
作者:,Ernest A

最佳答案

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

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

诀窍是将记录分隔符设置为 文件的开头(^)或换行符,然后是#和另一个换行符\n


作者:terdon

相关问答

添加新评论