Sed
刪除具有相同第一行的行組,但第一次出現的行除外
這可能是幾個問題,但這個問題讓我卡住了。我有一個文本文件,其中包含由空行分隔的四行分組。每個分組的第一行都以“>”符號開頭。我想刪除具有相同第一行的所有分組實例,但分組的第一個實例除外。首先想到的是使用 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]
真),則列印它。