我有一個perl腳本,它在cisco交換機上運行並執行'show mac-address-table dynamic'命令。它將數據存儲在@ver中。然後,我使用正則表達式僅從@ver獲取mac地址,然後根據所需的初始八位組地址區分mac地址。我現在想要排序以及唯一的MAC地址和計數器一樣,重複唯一地址的次數。我正在使用linux命令'sort | uniq -d -c'。爲了解釋它在很短的腳本如下:Perl獲取唯一和排序元素的計數器
my @ver = $session->cmd('show mac-address-table dynamic');
my $mac_addr;
my @sonic_macaddr;
my @final_macaddr;
for my $line (@ver) {
if (my ($mac_addr) = $line =~ /((?:[0-9a-f]{4}\.){2}[0-9a-f]{4})/) {
$mac_addr = $1;
if ($mac_addr =~ m/^(0018)[.]/ or $mac_addr =~ m/^(a0ce)[.]/ or $mac_addr =~ m/^(0009)[.]/){
push (@sonic_macaddr, $mac_addr."\n");
@final_macaddr = qx (@sonic_macaddr | sort | uniq -d -c);
print @final_macaddr;
}
}
}
$session->close()
如果我使用QX在腳本本身來執行它,我沒有得到所需要的輸出,否則它工作正常,在命令行上。例如perl.pl |排序| uniq -d -c。請建議我去哪裏錯了。謝謝。
這看起來有點我想要的。感謝您對散列內容的建議。這有助於覆蓋櫃檯部分。另外,你能建議我應該怎麼做才能在你的情況下得到輸出:1 2 a 2 c 2.這樣的MAC地址和重複的次數。謝謝。 – deep
這將是'print $ k','$ unic {$ k},「\ n」' – zlr