如何在bash中连接来自同一段落的行?

如何在bash中连接来自同一段落的行?,bash,Bash,我有一个包含以下行的日志文件: vi测试日志 23 Jan 01:29:33.498/GLOBAL/ser: RECEIVED message from 91.x.x.x:33583: INVITE sip:39329172xxxx@sip.x SIP/2.0^M Supported: ^M Allow: INVITE, ACK, OPTIONS, CANCEL, BYE^M Contact: sip:131400xxxx@91.x.x.x:33583^M

我有一个包含以下行的日志文件:

vi测试日志

23 Jan 01:29:33.498/GLOBAL/ser: RECEIVED message from 91.x.x.x:33583: INVITE sip:39329172xxxx@sip.x SIP/2.0^M Supported: ^M Allow: INVITE, ACK, OPTIONS, CANCEL, BYE^M Contact: sip:131400xxxx@91.x.x.x:33583^M Via: SIP/2.0/UDP 91.x.x.x:33583;branch=z9hG4bKe65d47e555749b753faaf095c3256ec569bde77d37de66f62ff18bc40d492496^M Call-id: ac755ea7e10821aa8174b2e5cd51d9e6^M Cseq: 1 INVITE^M From: sip:131400xxxx@sip.x;tag=5a541f1b2fd279cd0b8af3be3f67c7cf^M ax-forwards: 70^M To: sip:39329172xxxx@sip.x^M Content-type: application/sdp^M Content-length: 127^M ^M v=0^M o=anonymous 1327282173 1327282173 IN IP4 91.x.x.x^M s=session^M c=IN IP4 91.x.x.x^M t=0 0^M m=audio 5856 RTP/AVP 0^M 23 Jan 01:29:33.499/GLOBAL/ser: SENDING message to 91.x.x.x:33583: SIP/2.0 100 trying -- your call is important to us^M Via: SIP/2.0/UDP 91.x.x.x:33583;branch=z9hG4bKe65d47e555749b753faaf095c3256ec569bde77d37de66f62ff18bc40d492496^M Call-id: ac755ea7e10821aa8174b2e5cd51d9e6^M Cseq: 1 INVITE^M From: sip:131400xxxx@sip.x;tag=5a541f1b2fd279cd0b8af3be3f67c7cf^M To: sip:39329172xxxx@sip.x^M Server: SSP v2.0.84^M Content-Length: 0^M ^M 1月23日01:29:33.498/GLOBAL/ser:收到来自91.x.x.x:33583的消息: 邀请sip:39329172xxxx@sip.xSIP/2.0^M 支持:^M 允许:邀请,确认,选项,取消,再见^M 联系人:sip:131400xxxx@91.x.x.x:33583^M Via:SIP/2.0/UDP 91.x.x.x:33583;分支机构=Z9HG4BKE65D47E55749B753FAAF095C3256EC569BDE77D37DE66F62FF18BC40D492496^M 呼叫id:ac755ea7e10821aa8174b2e5cd51d9e6^M Cseq:1^M 发件人:sip:131400xxxx@sip.x;标签=5a541f1b2fd279cd0b8af3be3f67c7cf^M ax向前:70^M 致:sip:39329172xxxx@sip.x^M 内容类型:应用程序/sdp^M 内容长度:127^M ^M v=0^M o=IP4 91.x.x.x^M中的匿名1327282173 1327282173 s=会话^M c=在IP4中91.x.x.x^M t=0^M m=音频5856 RTP/AVP 0^m 1月23日01:29:33.499/GLOBAL/ser:正在向91.x.x.x:33583发送消息: SIP/2.0 100正在尝试--您的呼叫对我们很重要^M Via:SIP/2.0/UDP 91.x.x.x:33583;分支机构=Z9HG4BKE65D47E55749B753FAAF095C3256EC569BDE77D37DE66F62FF18BC40D492496^M 呼叫id:ac755ea7e10821aa8174b2e5cd51d9e6^M Cseq:1^M 发件人:sip:131400xxxx@sip.x;标签=5a541f1b2fd279cd0b8af3be3f67c7cf^M 致:sip:39329172xxxx@sip.x^M 服务器:SSP v2.0.84^M 内容长度:0^M ^M 我想要实现的是:

23 Jan 01:29:33.498/GLOBAL/ser: RECEIVED message from 91.x.x.x:33583:|INVITE sip:39329172xxxx@sip.x SIP/2.0|Supported:|Allow: INVITE, ACK, OPTIONS, CANCEL, BYE|Contact: sip:1314007008@91.x.x.x:33583|Via: SIP/2.0/UDP 91.x.x.x:33583;branch=z9hG4bKe65d47e555749b753faaf095c3256ec569bde77d37de66f62ff18bc40d492496|Call-id: ac755ea7e10821aa8174b2e5cd51d9e6|Cseq: 1 INVITE|From: sip:131400xxxx@sip.x;tag=5a541f1b2fd279cd0b8af3be3f67c7cf|Max-forwards: 70|To: sip:39329172xxxx@sip.x|Content-type: application/sdp|Content-length: 127|v=0|o=anonymous 1327282173 1327282173 IN IP4 91.x.x.x|s=session|c=IN IP4 91.x.x.x|t=0 0|m=audio 5856 RTP/AVP 0 23 Jan 01:29:33.499/GLOBAL/ser: SENDING message to 91.x.x.x:33583:|SIP/2.0 100 trying -- your call is important to us|Via: SIP/2.0/UDP 91.x.x.x:33583;branch=z9hG4bKe65d47e555749b753faaf095c3256ec569bde77d37de66f62ff18bc40d492496|Call-id: ac755ea7e10821aa8174b2e5cd51d9e6|Cseq: 1 INVITE|From: sip:131400xxxx@sip.x;tag=5a541f1b2fd279cd0b8af3be3f67c7cf|To: sip:39329172xxxx@sip.x|Server: SSP v2.0.84|Content-Length: 0 1月23日01:29:33.498/GLOBAL/ser:收到来自91.x.x.x:33583的消息:|邀请sip:39329172xxxx@sip.xSIP/2.0 |支持:|允许:邀请、确认、选项、取消、再见|联系人:SIP:1314007008@91.x.x.x:33583 | Via:SIP/2.0/UDP 91.x.x.x:33583;branch=Z9HG4BKE65D47E55749B753FAAF095C3256EC569BDE77D37DE66F62FF18BC40D49246 |呼叫id:ac755ea7e10821aa8174b2e5cd51d9e6 | Cseq:1邀请|发件人:sip:131400xxxx@sip.x;tag=5a541f1b2fd279cd0b8af3be3f67c7cf |最大转发:70 |到:sip:39329172xxxx@sip.x|内容类型:application/sdp |内容长度:127 | v=0 | o=IP4 91.x.x.x中的匿名1327282173 1327282173 | s=session | c=IP4 91.x.x.x | t=0 0 | m=audio 5856 RTP/AVP 0 1月23日01:29:33.499/GLOBAL/ser:发送消息至91.x.x.x:33583:| SIP/2.0 100尝试--您的呼叫对我们很重要|通过:SIP/2.0/UDP 91.x.x.x:33583;branch=Z9HG4BKE65D47E55749B753FAAF095C3256EC569BDE77D37DE66F62FF18BC40D49246 |呼叫id:ac755ea7e10821aa8174b2e5cd51d9e6 | Cseq:1邀请|发件人:sip:131400xxxx@sip.x;标签=5a541f1b2fd279cd0b8af3be3f67c7cf |至:sip:39329172xxxx@sip.x|服务器:SSP v2.0.84 |内容长度:0 基本上,同一段落(会话)中的所有行都应该用“|”连接起来。然后应添加回车,并将下一段连接起来,依此类推。请注意,每个新行都以日期和时间开头


到目前为止,我只能连接所有行,但无法添加回车。。任何帮助都将不胜感激。谢谢。

您可以使用以下awk脚本执行此操作:

awk '{if ($0 ~ /^\s*$/) {print line; line="";} else line=line $0 "|"}' file.txt
这是假设在段落结束后,始终会出现一个与示例相同的空行

说明:

$0 ~ /^\s*$/ - to check if line is completely blank or only has white spaces
if block executes when blank line appears. It prints line var and resets line to ""
else block is concatenating line variable with the current line of file and a pipe

您可以使用以下awk脚本来执行此操作:

awk '{if ($0 ~ /^\s*$/) {print line; line="";} else line=line $0 "|"}' file.txt
这是假设在段落结束后,始终会出现一个与示例相同的空行

说明:

$0 ~ /^\s*$/ - to check if line is completely blank or only has white spaces
if block executes when blank line appears. It prints line var and resets line to ""
else block is concatenating line variable with the current line of file and a pipe
这可能适用于您(尽管您的数据不清楚):

这可能适用于您(尽管您的数据不清楚):


您能发布您迄今为止尝试过的代码吗?在包含除$以外的任何内容的行中,您想将$\n替换为|公平吗?然后去掉只有一美元的行?是的,没错。。但是$实际上是不可见的,所以它只是一个回车符。您可以发布您迄今为止尝试过的代码吗?在包含除$以外的任何内容的行上,是否公平地说您要将$\n替换为|?然后去掉只有一美元的行?是的,没错。。但是$实际上是不可见的,所以它只是一个回车符,实际上$符号是一个不可见的字符。。在Vi中,我使用了:set list。在正常情况下,美元不会显示出来你太棒了!它工作得很好!你能解释一下每一部分的作用吗?很高兴它能起作用,在我的回答中添加了一些解释。实际上,$符号是一个看不见的字符。。在Vi中,我使用了:set list。在正常情况下,美元不会显示出来你太棒了!它工作得很好!你能解释一下每一部分都做了些什么供我参考吗?很高兴它成功了,在我的回答中补充了一些解释。