Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl-按MAC地址排序_Perl_Sorting_Mac Address - Fatal编程技术网

perl-按MAC地址排序

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

我有一个由设备信息组成的长.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"; 
    }
}
#!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您想要的是stringwise
cmp
,而不是
,因为这些是“十六进制冒号”规范格式的MAC,OP需要按前三个八位字节分组。另外,
$out
后面的逗号也不能满足您的需要。