Perl脚本的文件格式问题

时间:2018-03-27 12:18:20

标签: perl

我遇到了针对我们从Cisco交换机获得的一些文本文件运行Perl脚本的问题。看来,根据我们用来从交换机获取信息的方法,文件具有不同的格式,可以正确解析或被Perl脚本忽略。

我不确定如何在问题上显示格式

此格式被忽略:

Load for five secs: 32%/0%; one minute: 14%; five minutes: 13%
Time source is NTP, 11:32:05.154 BST Tue Mar 27 2018
Fa0/1         1059225247       10607505            308           4511 
Fa0/13         266860396        1052489          79896              6 
Gi0/1       173770642844       20858446      958514311      452445559 
Gi0/2       161741166272       11443033     1056101155      429442472 
Po6         335511809116       32301479     2014615466      881888031 
Fa0/1         1874849888       10258324        1643899        2235298 
Fa0/13        1146650530        1515709        1754689        9028035 
Gi0/1         1152699582       10607505         206750           4483 
Gi0/2          818776784        3355128         206663           4690 
Po6           1971476366       13962633         413413           9173 

此格式正常

Load for five secs: 8%/0%; one minute: 13%; five minutes: 14%
Time source is NTP, .11:00:56.345 GMT Mon Feb 26 2018

Port            InOctets    InUcastPkts    InMcastPkts    InBcastPkts 
Fa0/1        12479523313       18114137          73428              7 
Fa0/2                  0              0              0              0 
Fa0/3                  0              0              0              0 
Fa0/4       133519690294      108839334          51277              0 
Fa0/5                  0              0              0              0 
Fa0/6        53741520430       53710739          51253              0 
Fa0/7        41441297607       48481526          51268              0 
Fa0/8       135436414967      109360255          51179              0 
Fa0/9                  0              0              0              0 
Fa0/10       15777946932       28964665          92027              7 
Fa0/11       18242079587       37105281          92028              8 
Fa0/12           6957880          94578              2             21 
Fa0/13          14966233         195958              2             20 
Fa0/14           6383951          87892              2             23 
Fa0/15          99056361         626574              8             35 
Fa0/16         534303664        1033306              8             36 
Fa0/17          99952212         629958              8             36 
Fa0/18         518959271        1027977              8             36 
Fa0/19      399717840577      296105605       17969848              0 
Fa0/20                 0              0              0              0 
Fa0/21                 0              0              0              0 
Fa0/22         796038075        4653515          14895          24243 
Fa0/23          81876696         212575          92046             13 
Fa0/24                 0              0              0              0 
Gi0/1       712152233997      245342838     1214298205      700443702 
Gi0/2        41503317082        8378680       78384491      326407250 

这是我使用的脚本;它完美适合我的需要。我将非工作文本粘贴到"工作文件中#34;这很有效,所以几乎就像文件没有被拿起一样。

#!/perl/bin/perl

use warnings;

my @files = <c:/perl64/SOUTH/*>;

foreach $file ( @files ) {

    open(FILE, "$file");

    while ( $line = <FILE> ) {

        print "$file $line" if $line =~ /Fa/n;
        print "$file $line" if $line =~ /Gi/n;
        print "$file $line" if $line =~ /Te/n;
        print "$file $line" if $line =~ /GE/n;
    }

    close FILE; 
}

1 个答案:

答案 0 :(得分:0)

问题是,默认情况下,Windows PowerShell会生成UTF-16LE输出,这意味着每个字符占用两个字节而不是一个

由于您没有对此进行解码,因此正则表达式不匹配,因此不会打印任何内容

查看Understanding default encoding and Change the same in PowerShell

如果将PowerShell输出的open(FILE, "$file")更改为open(FILE, '<:encoding(UTF-16)', $file)(原始引号是多余的),它应该会更好。请注意,您可能还需要删除初始BOM字符