首先感谢你花时间看这个。
我是perl的新手,我在学习的每一种该死的语言中苦苦挣扎......我猜我小时候被摔了太多次。我正在运行一个脚本,用于通过ssh登录失败登录的安全日志。
我想只打印此代码中的前25个结果,但我尝试的所有内容似乎都没有(对于另一个foreach):/,希望得到一些想法,然后自己表面。现在已经晚了......是的,那就是......这就是我愚蠢的原因
# list each IP ($z) and number of attempts ($count{$z}, sort by highest amount of attempts
foreach $z (sort { $count{$b} <=> $count{$a} } (keys %count) ) {
@geoData= &getGeo( $z ); # use subroutine getGeo to get location info
$cityName = $geoData[0]; # extract city from location info
$countryCode = $geoData[1]; # extract country code from location info
$reg = $geoData[2]; # extract country code digit
printf " %4d %-20s %-3s %-6s %-20s\n", $count{ $z }, $z, $countryCode, $reg, $cityName;
}
这是输出的样子,只列出了数百个IP,我只想要25个。
=======================Intrusion Report=======================
Count Remote IP Address Country City
==============================================================
7427 182.x.x.x IN
4091 200.x.x.x DO 05 Santo Domingo
2808 42.x.x.x CN
2223 114.x.x.x CN 23 Shanghai
1958 122.x.x.x CN 02 Hangzhou
1915 202.x.x.x ID 04 Jakarta
1410 klinikk.x.x.x RU 47 Klin
1190 195.x.x.x DE 16 Berlin
805 60.x.x.x CN 01 Hefei
646 tango054.x.x.x DE
645 216.x.x.x US CA Canyon Country
645 72.x.x.x US CA Canyon Country
583 61.x.x.x CN 02 Wenzhou
提前谢谢!
答案 0 :(得分:2)
使用列表切片将循环限制为25个元素:
for my $z ( ( sort { $count{$b} <=> $count{$a} } (keys %count) )[0..24] ) {
...
}
一些评论:
for
相同至foreach
。这两者是同义词。use strict; use warnings;
。这将要求您使用for
将my
循环内声明和使用的变量的范围词法化。