从日志文件中读取选定的列[重复]

Posted

技术标签:

【中文标题】从日志文件中读取选定的列[重复]【英文标题】:Read selected column from log file [duplicate] 【发布时间】:2019-05-16 02:53:03 【问题描述】:

你能帮我解决这个问题吗? 我有一个日志文件,里面有列。我只想看一个专栏。

这是示例日志文件:

2019-05-14 00:00:00 1558449 v7.41 33309 2019-05-14 00:00:00 1335564 v7.38 33600 2019-05-14 00:00:00 1584141 v7.34 39800 2019-05-14 00:00:00 1556654 v7.38 33600 2019-05-14 00:00:00 1456993 v7.39 33600 2019-05-14 00:00:00 1581138 v7.39 33600 2019-05-14 00:00:00 1224055 v7.39 33600 2019-05-14 00:00:00 1557900 v7.35 33309 2019-05-14 00:00:00 1576229 v7.39 33600 2019-05-14 00:00:00 1553292 v7.35 33309

我只需要阅读这个 1558449 专栏。

我试过的代码在这个链接中:

https://www.quora.com/How-do-I-to-read-lines-from-text-file-into-a-table-format-in-php

我希望输出会是这样的:

1558449 1335564 1584141 1556654 1456993 1581138 1224055 1557900 1576229 1553292

【问题讨论】:

php.net/manual/en/function.fgetcsv.php,空格作为分隔符。 【参考方案1】:

你应该做的是:

打开文件 逐行阅读 用分隔符分隔行(" ") 将字符串转换为数组 获取数组的第三个元素(索引 2)

例子

$fn = fopen("log.txt","r");
while(! feof($fn))  
    $line = fgets($fn);
    $val = explode(" ", $line)[2];
    echo $val."<br>";

fclose($fn);

【讨论】:

【参考方案2】:

嘿,用正则表达式来解决它。

首先,使用 PHP 的file_get_contents() 函数读取文件。此函数将整个文件读入字符串。 Reads entire file into a string - PHP

现在使用 PHP preg_match_all() 函数,从字符串中获取您想要的任何内容。 PHP: preg_match_all - Manual

见:

/**
$file = "2019-05-14 00:00:00 1558449 v7.41 33309
2019-05-14 00:00:00 1335564 v7.38 33600
2019-05-14 00:00:00 1584141 v7.34 39800
2019-05-14 00:00:00 1556654 v7.38 33600
2019-05-14 00:00:00 1456993 v7.39 33600
2019-05-14 00:00:00 1581138 v7.39 33600
2019-05-14 00:00:00 1224055 v7.39 33600
2019-05-14 00:00:00 1557900 v7.35 33309
2019-05-14 00:00:00 1576229 v7.39 33600
2019-05-14 00:00:00 1553292 v7.35 33309";
*/
$file = file($addressOfFile);
preg_match_all("/.*([0-9]7).*/", $file, $matches);

其结果将是:

array(2) 
  [0] =>
  array(10) 
    [0] =>
    string(39) "2019-05-14 00:00:00 1558449 v7.41 33309"
    [1] =>
    string(39) "2019-05-14 00:00:00 1335564 v7.38 33600"
    [2] =>
    string(39) "2019-05-14 00:00:00 1584141 v7.34 39800"
    [3] =>
    string(39) "2019-05-14 00:00:00 1556654 v7.38 33600"
    [4] =>
    string(39) "2019-05-14 00:00:00 1456993 v7.39 33600"
    [5] =>
    string(39) "2019-05-14 00:00:00 1581138 v7.39 33600"
    [6] =>
    string(39) "2019-05-14 00:00:00 1224055 v7.39 33600"
    [7] =>
    string(39) "2019-05-14 00:00:00 1557900 v7.35 33309"
    [8] =>
    string(39) "2019-05-14 00:00:00 1576229 v7.39 33600"
    [9] =>
    string(39) "2019-05-14 00:00:00 1553292 v7.35 33309"
  
  [1] =>
  array(10) 
    [0] =>
    string(7) "1558449"
    [1] =>
    string(7) "1335564"
    [2] =>
    string(7) "1584141"
    [3] =>
    string(7) "1556654"
    [4] =>
    string(7) "1456993"
    [5] =>
    string(7) "1581138"
    [6] =>
    string(7) "1224055"
    [7] =>
    string(7) "1557900"
    [8] =>
    string(7) "1576229"
    [9] =>
    string(7) "1553292"
  

现在您可以通过$matches[1] 这是一个数组来访问您想要的内容。

【讨论】:

谢谢伙计,但很抱歉我不小心提到了正则表达式。我对正则表达式一无所知。但提前感谢

以上是关于从日志文件中读取选定的列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用日志轮换从选定的日志文件中搜索字符串

如何在 pyspark 数据框中读取 csv 文件时读取选定的列?

无法读取日志文件并加载到 db java [重复]

更新 datagridview 时导出日志文件

在使用 python 写入时从日志文件中读取

SpringBoot日志配置文件不生效