请教一个问题,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
....
有什么方法,可以提取出有数据内容的主机,创建文本名为主机名,写入对应的数据。
求助有没有好的思路,谢谢各位!
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 |
2
anjing01 2018-03-02 11:54:18 +08:00
上面是笨法子,
如果主机名比较随意,内容也比较随意,那就更笨的法子,先筛选出来所有的主机名,记录行号,根据行号信息判断是否有内容,有的话 touch 文件,然后 sed 打印对应行号内容写入文件。 请大神给出好更加优化的法子 |
3
pkookp8 2018-03-02 12:43:59 +08:00 via Android
shell 不太会写
这样可不可以,先用正则匹配 ^.+:\n(\S+\n)*(\S+\n)替换成$2 然后一行行读,读到空行就新起文件 |
7
linyinma 2018-03-05 13:19:38 +08:00 2
perl -ne 'if(/^(\S+):/) {open(FILE, ">", $1);}else {print FILE;};' meclog
|
9
E1n OP <img src = "https://i.loli.net/2019/05/16/5cdd0b9800c0519912.png" />
|