
我有一個類似這樣的文件:
DN: 達南
cn: 大年
cn: 大年1
網域:danian2
cn: 大年2
網域:danian3
cn: 大年3
cn: 大年4
我想做的就是grep 模式“dn:”並僅打印接下來的兩行,但是當我運行grep -A 2“dn:”時,結果是文件中的所有內容,我只想打印接下來的兩行不是下 1 行
答案1
這可能有效:
$ awk -v RS="dn: " -v FS="\n" -v ORS="" 'NF>3 {print "dn:",$0}' input.txt
我們定義dn:
為記錄分隔符號。一筆記錄中的欄位由換行符號分隔\n
。
如果在以 開頭的行後面有兩行dn:
,在新記錄以 開頭之前dn:
,您將有 3 個“\n”,導致記錄中的 4 個欄位。這就是為什麼我們檢查記錄中是否有超過 3 個欄位 ( NF>3
)。如果是這種情況,我們會列印整個記錄,但需要在前面添加dn:
.
請注意,這NF>3
將會尋找一筆記錄中包含多於兩行以下行的所有記錄。如果您只想要那些恰好有兩個的,請將其更改為NF==3
.
如果區塊由空白行分隔(正如您後來的評論之一所示),請改用:
$ awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}' input.txt
答案2
我運行上面的命令並且運行良好,
awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}'
分隔的區塊是空白的,它工作得很好。