首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据段落将日志文本分开?

根据段落将日志文本分开?
EN

Ask Ubuntu用户
提问于 2018-07-06 08:02:40
回答 2查看 353关注 0票数 0
代码语言:javascript
复制
****************
* 192.168.1.1
****************
ssh -q 192.168.1.1 ntpstat
synchronised to NTP server (192.168.204.1) at stratum 5
time correct to within 281 ms
polling server every 1024 s

****************
* 192.168.1.3
****************
ssh -q 192.168.1.3 ntpstat
synchronised to NTP server (192.168.1.2) at stratum 12
time correct to within 57 ms
polling server every 1024 s

我有这个日志文本,我想把它分开,就像:

段落:

代码语言:javascript
复制
****************
* 192.168.1.1
****************
ssh -q 192.168.1.1 ntpstat
synchronised to NTP server (192.168.204.1) at stratum 5
time correct to within 281 ms
polling server every 1024 s

第2款:

代码语言:javascript
复制
****************
* 192.168.1.3
****************
ssh -q 192.168.1.3 ntpstat
synchronised to NTP server (192.168.1.2) at stratum 12
time correct to within 57 ms
polling server every 1024 s

提前谢谢。

EN

回答 2

Ask Ubuntu用户

发布于 2018-07-06 08:33:08

如果您的输入文件是test.log,并且希望在每个空行上拆分它,创建一堆编号为test-XXX.log的文件,您可以使用这样的Bash循环来实现:

代码语言:javascript
复制
number=1
while read line ; do 
    echo "$line" >> "test-$number.log"
    if [[ -z "$line" ]] ; then 
        ((number++))
    fi
done < test.log 

或缩短为一行:

代码语言:javascript
复制
n=1;while read l;do echo "$l">>"test-$n.log";if [[ -z "$l" ]];then ((n++));fi;done

这将逐行读取输入文件,并在每次输入中遇到空行时增加计数器。每一行所附加的输出文件名包含计数器,以便数据以不同的文件结束。

票数 2
EN

Ask Ubuntu用户

发布于 2018-07-06 11:25:55

通过设置空记录分隔符RS,可以使用段落模式使用Awk将文件拆分为记录,分隔为一个或多个空行。

然后,通过将记录号NR附加到您选择的基名中,可以为这些片段创建数字递增的名称:

代码语言:javascript
复制
awk -vRS= '{print > "paragraph" NR}' log.txt

另一个选项是使用csplit与正则表达式/^$/匹配空行:

代码语言:javascript
复制
csplit -sz --prefix='paragraph' --suffix-format='%d' log.txt '/^$/' '{*}'

如果您不介意默认的文件名序列--prefixxx01等,则可以省略xx00D9

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1052622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档