我知道我可以使用RS=""
将记录分隔符设置为多个连续的空行。但是,如果这些行包含空格或制表符,则无法使用。我正在考虑将RF
设置为某种正则表达式来进行匹配。但这很难,因为在这种情况下,\n
通常会用作字段分隔符FS
。有什么建议吗?
答案 0 :(得分:4)
这是一种方法:
awk '!NF {$0=""}1' file | awk -v RS="" '{print NR,$0}'
第一个awk
计算该行上的字段。如果您的空白行或行仅包含空格和制表符,则为0
。然后它只是将行更改为空。在此之后,您可以使用RS=""
这是一个gnu awk
版本(由于RS中有多个字符):
awk -v RS="\n([[:space:]]*\n)+" '{print NR,$0}' file
它可能没有括号,但我不确定是否所有内容都将被涵盖:
awk -v RS="\n[[:space:]]*\n+" '{print NR,$0}' file
答案 1 :(得分:2)
使用GNU awk进行多字符RS:
awk -v RS='\n(([[:space:]]*\n)+|$)' '{print NR, "<" $0 ">"}' file
e.g。
$ awk '{print NR, "<" $0 ">"}' file
1 <a>
2 < b>
3 < >
4 < c>
$ awk -v RS='\n(([[:space:]]*\n)+|$)' '{print NR, "<" $0 ">"}' file
1 <a
b>
2 < c>