Sed

刪除具有相同第一行的行組,但第一次出現的行除外

  • June 20, 2019

這可能是幾個問題,但這個問題讓我卡住了。我有一個文本文件,其中包含由空行分隔的四行分組。每個分組的第一行都以“>”符號開頭。我想刪除具有相同第一行的所有分組實例,但分組的第一個實例除外。首先想到的是使用 sed 但想不出一個好的實現方法。將不勝感激任何幫助!

輸入:

>abc1234.54321
linea1
lineaa1
lineaaa1

>def56789034
linea1
lineaa1
lineaaa1

>abc1234.54321
linea2
lineaa2
lineaaa2

>def56789034
linea2
lineaa2
lineaaa2

預期輸出:

>abc1234.54321
linea1
lineaa1
lineaaa1

>def56789034
linea1
lineaa1
lineaaa1

如果您不介意額外的尾隨空白行,那麼 paragrapgh 模式下的 Awk 將使您接近:

$ awk -vRS= '!seen[$1]++' ORS='\n\n' input
>abc1234.54321
linea1
lineaa1
lineaaa1

>def56789034
linea1
lineaa1
lineaaa1

取消設置記錄分隔符 ( RS=) 會導致 Awk 將每組空行分隔的行視為一條記錄;然後我們使用在第一個欄位上鍵控的關聯數組的值$1來跟踪我們之前是否看到過具有此鍵的記錄 - 如果沒有(即為!seen[$1]真),則列印它。

引用自:https://unix.stackexchange.com/questions/526127