Shell-Script

使用通用字元串“消息”按特定順序拆分文本

  • June 22, 2018

我有一個包含以下內容的文本文件

$ cat foo.txt

some text 
email@id.com
8903457923
2018-02-09 07:12 (Asia/Kolkata)
again some text over here
some more text again
Message
some text 
email@id.com
8903457923
2018-02-05 07:12 (Asia/Kolkata)
again some text over here
some more text again
Message

我想得到以下輸出

$ cat foo.txt

some text  email@id.com  8903457923  2018-02-09 07:12 (Asia/Kolkata)  again some text over her  some more text again  Message

some text email@id.com  8903457923  2018-02-05 07:12 (Asia/Kolkata) again some text over here  some more text again  Message

我想我可以使用 tr 並將“Message”作為通用字元串來實現這一點。但不確定如何實現這一點。

如果目前行不是“消息”,則將該行附加到列表中,並與 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)三元運算元;它檢查是否t為空;如果是,則只需將目前行分配給它;否則,將目前值附加到 OFS 後跟目前行。

輸出:

some text  email@id.com 8903457923 2018-02-09 07:12 (Asia/Kolkata) again some text over here some more text again Message

some text  email@id.com 8903457923 2018-02-05 07:12 (Asia/Kolkata) again some text over here some more text again Message

引用自:https://unix.stackexchange.com/questions/450891