結果:

結果:

パターンの始まりと終わりの間に興味のあるレコード(何百万ものレコード)がある次のファイルがあります。開始パターンは常にAで始まり、終了パターンは常にZで始まります。

Apattern1   somethinghere    #start of pattern always starts with A
Line-of-data-here-aaa
Line-of-data-here-xxxxx
Zpattern1  #end of pattern always starts with Z
ApatternX   somethinghere    #Repeat: start of pattern always starts with A
Line-of-data-here-bbbb
Line-of-data-here-yyyy
Line-of-data-here-nnnnn
ZpatternX

パターン内の行に開始パターン(全行)を追加してデータを変換しようとしています。終了パターンを削除したいです。 sedおよび/またはawkを使用して、パターンの先頭(Aで始まる)の行をパターン内の行(Lで始まる)に追加し、パターンの終わり(常にZで始まる)を削除しようとします。データファイルは次のとおりです。

Apattern1   somethinghere  Line-of-data-here-aaa
Apattern1   somethinghere   Line-of-data-here-xxxxx
ApatternX   somethinghere   Line-of-data-here-bbbb
ApatternX   somethinghere  Line-of-data-here-yyyy
ApatternX   somethinghere  Line-of-data-here-nnnnn

ベストアンサー1

あなたの質問を理解する限り、あなたが求めるものは次のとおりです。

sed -E '/^A/h;/^[AZ]/d;G;s/(.*)\n(.*)/\2 \1/' yourfile

したがって、orで始まる行はA予約済みスペース()にコピーされ、orで始まる行は印刷する必要がないため/^A/h削除されます()。他のすべての行の場合、その行の予約済みスペースが追加され()、2つの部分は改行文字()の代わりにスペースに置き換えられます。AZ/^[AZ]/dAGs/(.*)\n(.*)/\2 \1/

sed(私自身の拡張は簡単です。\h交換時にバッファの内容を維持するために拡張することです。

sed -E '/^A/h;/^[AZ]/d;G;s/^/\h /' yourfile

このような問題がさらに発生した場合は、マージ要求を送信します。 )

おすすめ記事