Shell-Script
使用通用字元串“消息”按特定順序拆分文本
我有一個包含以下內容的文本文件
$ 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