如何告诉 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
。