これはおそらくいくつかの質問を一つにまとめたようですが、これは私を妨げています。空白行で区切られた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)印刷します。