簡體   English   中英

awk如何設置記錄分隔符,因為多個連續的空行或僅包含空格和/或制表符的行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM