共通文字列「メッセージ」を使用して、特定の順序でテキストを分割します。

共通文字列「メッセージ」を使用して、特定の順序でテキストを分割します。

次の内容を含むテキストファイルがあります。

$ cat foo.txt

some text 
[email protected]
8903457923
2018-02-09 07:12 (Asia/Kolkata)
again some text over here
some more text again
Message
some text 
[email protected]
8903457923
2018-02-05 07:12 (Asia/Kolkata)
again some text over here
some more text again
Message

次の出力を取得したい。

$ cat foo.txt

some text  [email protected]  8903457923  2018-02-09 07:12 (Asia/Kolkata)  again some text over her  some more text again  Message

some text [email protected]  8903457923  2018-02-05 07:12 (Asia/Kolkata) again some text over here  some more text again  Message

私はtrを使用し、「メッセージ」を通常の文字列として使用してこれを達成できると思います。しかし、実装方法がわかりません。

ベストアンサー1

現在の行が「メッセージ」でない場合は、リストに行を追加し、「メッセージ」が表示されたらOFSに関連付けて現在のリストを印刷します(OFSとして現在の「メッセージ」行に関連付けられています)。

awk '/^Message$/ { print t OFS $0 ORS; t=""; } !/^Message$/ { t=(t ? t OFS $0 : $0) }' < foo.txt

そのt=(t ? t OFS $0 : $0)部分は三項演算子です。tnull の場合は現在の行が割り当てられ、それ以外の場合は現在の値が OFS に追加されます。

出力:

some text  [email protected] 8903457923 2018-02-09 07:12 (Asia/Kolkata) again some text over here some more text again Message

some text  [email protected] 8903457923 2018-02-05 07:12 (Asia/Kolkata) again some text over here some more text again Message

おすすめ記事