![](/img/trans.png)
[英]How to set a multicharacter record separator RS in GNU awk so it encompasses the new lines?
[英]awk how to set record separator as multiple consecutive empty lines or lines only include space and/or tab characters?
我知道我可以使用RS=""
將記錄分隔符設置為多個連續的空行。 但是,如果這些行包含空格或制表符,將無法使用。 我正在考慮將RF
設置為某種正則表達式來進行匹配。 但這很困難,因為在這種情況下,通常\\n
用作字段分隔符FS
。 有什么建議么?
這是一種方法:
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
對於多字符RS,使用GNU awk:
awk -v RS='\n(([[:space:]]*\n)+|$)' '{print NR, "<" $0 ">"}' file
例如
$ 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.