perl-按MAC地址排序
我有一个由设备信息组成的长.csv文件。每一行都是一个独特的设备,其信息如下所示:perl-按MAC地址排序,perl,sorting,mac-address,Perl,Sorting,Mac Address,我有一个由设备信息组成的长.csv文件。每一行都是一个独特的设备,其信息如下所示: MACaddr,,,,Date,Date,,"b,n",,blahblahblah 我需要做的是接收该文件,然后将具有相同供应商MAC(即MAC地址的前3个八位字节)的所有线路/设备分组到一个新文件中。我可以很容易地接受每一行,用正则表达式抓住厂商的MAC,但是我被卡住了 我所拥有的只是: #!usr/bin/perl use strict; use warnings; open IN, "wirelessC
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";
}
}
#!usr/bin/perl
严格使用;
使用警告;
在“wirelessClients.csv”中打开,或在“无法打开文件\n$!”中死亡;
打开“>sortedClients.csv”或die“无法打开文件\n$!”;
我的@clients=;
foreach my$client(@clients)
{
如果($client=~/^(\w+:\w+:\w+/)
{
打印出“$1,$client\n\n”;
}
}
我不知道如何对信息进行分类
任何帮助和/或指导都将不胜感激 如果MAC地址是第一个元素,则简单排序应将具有相同前3个八位字节的元素分组:
sort wirelessClients.csv > sortedClients.csv
当我们看到第一个八位字节时,您可以简单地按字母数字进行数字排序:
#!/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 $_;
}
#/usr/bin/perl
严格使用;
使用警告;
打开(我的$in、、“SortedClient.csv”)或死亡“无法打开输出文件:$!”;
我的@clients=;
我的@sorted=sort{$a cmp$b}@clients;
foreach@sorted{
打印$out$;
}
考虑一下,除非你有充分的理由不这么做。哦,哇,这太简单了。。。我在想怎么努力。非常感谢。好消息,皮尔克罗,谢谢你。我会调整我的方式,不客气。移动到一个答案,这样你就可以结束这个问题。@pilcrow在一个8行脚本上?!为什么?这就像是说永远没有主线代码,而只写带有子例程的模块。还有很多更重要的事情需要担心。\n\n\n\n您想要的是stringwisecmp
,而不是
,因为这些是“十六进制冒号”规范格式的MAC,OP需要按前三个八位字节分组。另外,$out
后面的逗号也不能满足您的需要。