我有一个由设备信息组成的长.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";
}
}
我不知道如何对信息进行排序。
非常感谢任何帮助和/或指导!
答案 0 :(得分:4)
如果MAC地址是第一个元素,则一个简单的排序应该对具有相同前3个八位字节的组进行分组:
sort wirelessClients.csv > sortedClients.csv
答案 1 :(得分: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 $_;
}