V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
E1n
V2EX  ›  Linux

求助 Linux 下数据提取收集问题。

  •  
  •   E1n · 2018-03-02 09:42:45 +08:00 · 2528 次点击
    这是一个创建于 2239 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一个问题,meclog 得到数据文件格式如下:
    app10:
    app11:
            Hardware event. This is not a software error.
            MCE 0
            CPU 0 BANK 9
            MISC 90841000100128c ADDR c2e60a000
            ...
    app20:
    app30:
            Hardware event. This is not a software error.
            MCE 0
            CPU 0 BANK 9
            MISC 90841000100128c ADDR c2e60a000
            ....
    有什么方法,可以提取出有数据内容的主机,创建文本名为主机名,写入对应的数据。
    求助有没有好的思路,谢谢各位!

    9 条回复    2019-05-16 15:07:19 +08:00
    anjing01
        1
    anjing01  
       2018-03-02 11:50:32 +08:00
    假设机器名是 app 开头的从 10-30,假设有内容主机数据行数都一样,可以这样写:
    #!/bin/bash

    for i in app{10..30};
    do
    j=`grep $i meclog -A1|grep -v app|wc -l`
    if [ "$j" == 1 ]
    then
    touch $i
    grep $i meclog -A4|grep -v $i >$i
    fi
    done
    anjing01
        2
    anjing01  
       2018-03-02 11:54:18 +08:00
    上面是笨法子,
    如果主机名比较随意,内容也比较随意,那就更笨的法子,先筛选出来所有的主机名,记录行号,根据行号信息判断是否有内容,有的话 touch 文件,然后 sed 打印对应行号内容写入文件。

    请大神给出好更加优化的法子
    pkookp8
        3
    pkookp8  
       2018-03-02 12:43:59 +08:00 via Android
    shell 不太会写
    这样可不可以,先用正则匹配
    ^.+:\n(\S+\n)*(\S+\n)替换成$2

    然后一行行读,读到空行就新起文件
    E1n
        4
    E1n  
    OP
       2018-03-02 13:08:17 +08:00
    @pkookp8 这正则我看看,不是很懂。。
    E1n
        5
    E1n  
    OP
       2018-03-02 13:08:41 +08:00
    @anjing01 我试试,感谢回复!
    pkookp8
        6
    pkookp8  
       2018-03-02 15:33:55 +08:00 via Android
    @pkookp8 把类似于 xxx 冒号换行后面跟着非空字符的分组,替换成最后一组。
    就是去掉无效行
    linyinma
        7
    linyinma  
       2018-03-05 13:19:38 +08:00   ❤️ 2
    perl -ne 'if(/^(\S+):/) {open(FILE, ">", $1);}else {print FILE;};' meclog
    E1n
        8
    E1n  
    OP
       2018-03-06 00:19:08 +08:00
    @linyinma 提取很准确,十分感谢! perl 很好用,想学习下有什么好的建议吗。。
    E1n
        9
    E1n  
    OP
       2019-05-16 15:07:19 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5419 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:08 · PVG 16:08 · LAX 01:08 · JFK 04:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.