是否可以打印日志文件的特定部分?

时间:2014-12-27 18:51:23

标签: c linux unix

我有一个日志文件,我想使用C程序在下面的文件中打印以太网地址。那我该怎么办呢?我的日志文件如下:

*Thu Dec 25 11:40:41 2014; ******** LAN traffic monitor started ********** LAN traffic log, generated Thu Dec 25 11:41:41 2014


Ethernet address: 08:00:27:d7:54:fa
    Incoming total 389 packets, 184398 bytes; 388 IP packets
    Outgoing total 383 packets, 64444 bytes; 382 IP packets
    Average rates:     24.58 kbps incoming,      8.59 kbps outgoing
    Last 5-second rates:      0.86 kbps incoming,      0.45 kbps outgoing

Ethernet address: 52:54:00:12:35:02
    Incoming total 383 packets, 64444 bytes; 382 IP packets
    Outgoing total 389 packets, 184398 bytes; 388 IP packets
    Average rates:      8.59 kbps incoming,     24.58 kbps outgoing
    Last 5-second rates:      0.45 kbps incoming,      0.86 kbps outgoing

Running time: 60 seconds

*** LAN traffic log, generated Thu Dec 25 11:42:41 2014


iEthernet address: 08:00:27:d7:54:fa
    Incoming total 395 packets, 184935 bytes; 393 IP packets
    Outgoing total 389 packets, 64805 bytes; 387 IP packets
    Average rates:     12.33 kbps incoming,      4.32 kbps outgoing
    Last 5-second rates:      0.00 kbps incoming,      0.00 kbps outgoing

Ethernet address: 52:54:00:12:35:02
    Incoming total 389 packets, 64805 bytes; 387 IP packets
    Outgoing total 395 packets, 184935 bytes; 393 IP packets
    Average rates:      4.32 kbps incoming,     12.33 kbps outgoing
    Last 5-second rates:      0.00 kbps incoming,      0.00 kbps outgoing

Running time: 120 seconds

2 个答案:

答案 0 :(得分:1)

1)使用fopen()打开日志文件。

2)逐行阅读fgets()

3)使用strstr()在每一行搜索关键短语“以太网地址”。

4)用printf()打印这样的行。

5)使用fclose()关闭文件。

答案 1 :(得分:1)

什么构成了一个'部分'日志文件?

  • 如果您指的是包含'以太网地址'的单行,那么grepsed很容易:

    grep 'Ethernet address' logfile
    sed -n '/Ethernet address/p' logfile
    
  • 如果您指的是以太网地址'开头的行块,那么sed很容易,如果块的大小是grep则可以使用固定:

    sed -n '/Ethernet address/,/^$/p' logfile
    grep -A 5 'Ethernet address' logfile
    

    两个命令都包含输出中的空白行。如果不需要,那么:

    sed -n '/Ethernet address/,/^$/{ /^$/d; p;}' logfile
    grep -A 4 'Ethernet address' logfile
    
  • 如果你真的想为这份工作编写一个C程序,那肯定是可行的,如果你有一套很好的库来支持你,不是很难。它实际处理文件的代码少于30行(无论你想要块处理的方式),还有80行支持代码用于参数处理等(取决于你支持的选项数量,以及程序的灵活性)应该是一般的),加上库函数。它还取决于你想要的强度以及以太网地址'硬连线进入C程序(提示:你可能不希望它硬连线到程序中)。

请注意,显示的代码会选择&{39; iEthernet address'数据中显示的行。如果这不是拼写错误并且不想要该块,请在^之前的每个地方使用插入符号Ethernet