データ行の前にヘッダー行を追加して、テキストファイルを並べ替えます。

データ行の前にヘッダー行を追加して、テキストファイルを並べ替えます。

内容は次のようなファイルがあります。

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

私の考えでは:

  1. キーワード2009で始まるすべての行を見つけます。
  2. この行は、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

おすすめ記事