【问题标题】:Perl - Reading the contents of a file in a structured manner [closed]Perl - 以结构化方式读取文件的内容[关闭]
【发布时间】:2015-07-21 16:41:46
【问题描述】:

正如标题所述,我想读取由 Perl 脚本动态生成的现有文件的内容。该文件将或多或少遵循以下示例中所示的相同结构。唯一真正的区别是后面的数据量。

Recv-Q Send-Q             Local Address:Port               Peer Address:Port 
0      128                            *:111                           *:*     
0      128                            *:22                            *:*     
0      128                    127.0.0.1:631                           *:*     
0      128                            *:53944                         *:*     
0      100                    127.0.0.1:25                            *:*   

读取此文件的目的是使用数据并进一步过滤其中的内容。例如,仅列出具有 Port:22 的数据并将其呈现给最终用户,但这超出了我的问题范围。

我想要实现的是读取每个标题,例如 Recv-QSend-QLocal Address:PortPeer Address:Port 作为散列的 keys。此后的值将由驻留在每个标题列下的数据组成。目标是能够使用标题作为指向值的指针来过滤掉某些列。

我希望实现的代码结构是一个列出所有标题的hash,并且在每个标题中都有一个包含所有列数据的array

我没有任何代码示例来说明我将如何解决这个问题,但我非常感谢任何关于此事的帮助。

【问题讨论】:

  • 我认为没有答案的原因是最后一句话。尝试一下,你可能会得到帮助。

标签: arrays perl hash


【解决方案1】:

只要在任何字段中都没有任何空白字符,您就可以使用split

这个程序使用一个正则表达式来做一个非常相似的事情,但是将行分成六个字段而不是四个——保持端口号与地址分开。它至少应该让你开始

use strict;
use warnings;
use 5.010;

<DATA>; # Lose header line

my @data;
while ( <DATA> ) {
  push @data, [ /[^\s:]+/g ];
}

use Data::Dump;
dd \@data;

__DATA__
Recv-Q Send-Q             Local Address:Port               Peer Address:Port 
0      128                            *:111                           *:*     
0      128                            *:22                            *:*     
0      128                    127.0.0.1:631                           *:*     
0      128                            *:53944                         *:*     
0      100                    127.0.0.1:25                            *:*   

输出

[
  [0, 128, "*", 111, "*", "*"],
  [0, 128, "*", 22, "*", "*"],
  [0, 128, "127.0.0.1", 631, "*", "*"],
  [0, 128, "*", 53944, "*", "*"],
  [0, 100, "127.0.0.1", 25, "*", "*"],
]

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2013-07-27
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多