最初の行が同じ行グループを削除する(最初の行を除く)

最初の行が同じ行グループを削除する(最初の行を除く)

これはおそらくいくつかの質問を一つにまとめたようですが、これは私を妨げています。空白行で区切られた4行のグループを含むテキストファイルがあります。各グループの最初の行は「>」記号で始まります。グループ化の最初のインスタンスを除いて、最初の行が同じすべてのグループ化インスタンスを削除したいと思います。最初に浮かぶのは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

ベストアンサー1

後ろに空行が追加される可能性が気に入らない場合は、paragrapghモードのAwkを使用すると近づきます。

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

>def56789034
linea1
lineaa1
lineaaa1

レコード区切り記号(RS=)を設定解除すると、Awkはスペースで区切られた各行セットを単一のレコードとして扱います。次に、最初のフィールドの連想配列値を使用して、以前にそのキーを持つ$1レコードを見たことがないかどうかを追跡します。 - そうでない場合(つまり、!seen[$1]true)印刷します。

おすすめ記事