内容は次のようなファイルがあります。
2009 150 0 0 0 0000
75.316 0.0400390625 0.00007 0.00000 0.8980
76.216 0.0400390625 0.00007 1.00000 0.9046
77.217 0.0400390625 0.00009 2.00000 0.9113
78.341 0.0400390625 0.00010 3.00000 0.9183
2009 150 2 0 0 0000
75.316 0.0400390625 0.00007 0.00000 0.8980
76.216 0.0400390625 0.00007 1.00000 0.9046
77.217 0.0400390625 0.00009 2.00000 0.9113
78.341 0.0400390625 0.00010 3.00000 0.9183
79.616 0.0400390625 0.00013 4.00000 0.9255
私の考えでは:
- キーワード2009で始まるすべての行を見つけます。
- この行は、2009で始まる他の行が見つかるまで、すべての後続の行の前に追加され、EOFまで続きます。
本質的に、次のような出力を探しています。
2009 150 0 0 0 0000 75.316 0.0400390625 0.00007 0.00000 0.8980
2009 150 0 0 0 0000 76.216 0.0400390625 0.00007 1.00000 0.9046
2009 150 0 0 0 0000 77.217 0.0400390625 0.00009 2.00000 0.9113
2009 150 0 0 0 0000 78.341 0.0400390625 0.00010 3.00000 0.9183
2009 150 2 0 0 0000 75.316 0.0400390625 0.00007 0.00000 0.8980
2009 150 2 0 0 0000 76.216 0.0400390625 0.00007 1.00000 0.9046
.........
私は長い間この問題に悩んできましたが、解決策が見つかりませんでした。どんな助けでも大変感謝します。フラグを使用してキーワード間のテキストを抽出する方法を知っていますが、これが正しい方向であるかどうかはわかりません。
ベストアンサー1
次の目的で使用できますawk
。
awk '/^2009/{a=$0;next}{print a" "$0} ' file.txt
これにより、2009が最初に表示される前に行の前にスペースが追加されます。次のようにデフォルトの文字列をプレフィックスに設定できます。
awk 'BEGIN{a="My default prepend string";}/^2009/{a=$0;next}{print a" "$0} ' file.txt