徐小玉的博客。
分类: LINUX
2007-09-05 11:05:45
#! /usr/bin/perl -w
use IO::Socket;
use strict;
if(scalar(@ARGV)!=1){ #参数个数
exit;
}
my $len; #每条记录的长度
my $num_log=0; #计算日志的行数。
my $file_size=0; # 存放文件的大小。
my @size; #计算数据大小的时候用到
my $file; #存放文件名称。
my $i; # 用来循环日志文件的每行。
my @content_chk; # 存放校验文件
my $content_chk; # 存放校验文件记录
my $count=0; #记录日志文件的行数
my $chk_size;
my $chk_lines;
my $file_size=0;
my $file_lines=0; #以上4变量记录文件大小行书校验文件中记录的文件大小行书。
$count = `wc -l < $ARGV[0]`;
die "wc failed: $?" if $?;
chomp($count);
print $count;
print "$ARGV[0] has $count lines!!\n";
for ($i=0;$i<="$count";$i++){
print "current line is :::$i\n";
$file= `awk 'NR==$i' "$ARGV[0]"`;
die "awk failed: $?" if $?;
chomp($file);
print "current file is :::$file\n";
open SOU,"< $file" ; # 打开每个文件。
foreach(
#检查长度是否正确。
$num_log=$num_log+1; #计算行数。
$len = length($_);
if ($len!=169){
print " 第$num_log行的数据长度不对!\n";
}
# $mode = (stat($_))[7];
}
# 得到每个文件的大小和行数。
@size=stat("$file");
$file_size = $size[7]; # 得到文件的大小
$file_lines = `wc -l < $file`;
chomp($file_lines); #得到文件的行数。
#得到校验文件记录的文件大小与行数。检查与校验文件是否匹配。
open SOUC,"< $file.chk" ;
@content_chk=
foreach $content_chk(@content_chk)
{
if ($content_chk=~/dat,(.*),(.*)/)
{
$chk_lines=$1;
$chk_size=$2;
#print "the first::::: $chk_size,Second:$chk_lines\n";
#print "$file 的大小为:$file_size ;行数为:$file_lines!\n";
if ($file_size !=$chk_size)
{
print "数据长度为$file_size,校验文件中记录的为$chk_size,行数不对!!!";
}
if ($file_lines !=$chk_lines)
{
print "数据长度为$file_lines,校验文件中记录的为$chk_lines,大小不对!!!\n";
}
}
}
# close SOU;
}