你如何告诉 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)
这是一种方法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
。