3

我有一个包含设备信息的长 .csv 文件。每条线路都是一个独特的设备,其自己的信息如下所示:

MACaddr,,,,Date,Date,,"b,n",,blahblahblah

我需要做的是获取文件,然后将具有相同供应商 MAC(即 MAC 地址的前 3 个八位字节)的所有线路/设备组合在一起写入一个新文件。我可以轻松地接受每一行并使用正则表达式获取供应商 MAC,但随后我被卡住了。

我只有:

#!usr/bin/perl
use strict;
use warnings;

open IN, "wirelessClients.csv" or die "Couldn't open file\n$!";
open OUT, ">sortedClients.csv" or die "Couldn't open out file\n$!";

my @clients = <IN>;

foreach my $client (@clients)
{
    if($client =~ /^(\w+:\w+:\w+)/)
    {
        print OUT "$1,$client\n\n"; 
    }
}

我不知道如何对信息进行排序。

任何帮助和/或指导将不胜感激!

4

2 回答 2

4

如果 MAC 地址是第一个元素,则简单排序应将具有相同前 3 个八位字节的一组:

sort wirelessClients.csv > sortedClients.csv
于 2013-07-29T16:28:56.570 回答
3

当我们正在查看第一个八位字节时,您可以简单地按字母数字顺序排序:

#!/usr/bin/perl

use strict;
use warnings;


open (my $in, '<', "wirelessClients.csv") or die "Cannot open Infile: $!";
open (my $out, '>',"sortedClients.csv") or die "Cannot open Outfile: $!";

my @clients = <$in>;

my @sorted = sort {$a cmp $b} @clients;

foreach @sorted {
    print $out $_;
}
于 2013-07-29T16:39:08.507 回答