判断码字行数并且提取码字

function [ line,k] = findLines( dst )
display('5.查看每行峰值')
[row,col]=size(dst);
obs = (dst==0);
rows= sum(obs,2);
figure,plot(rows);
title('5.查看每行峰值');
rowtvalue=round(col/20);
%峰值所在的位置(行数)存到一个数组line[]上
line=zeros(1,row);
k=0;
for i=4:row-3
    if (rows(i)>rows(i-1)) && (rows(i)>rows(i-2)) && (rows(i)>rows(i-3)) && (rows(i)>rows(i+1)) && (rows(i)>rows(i+2)) && (rows(i)>rows(i+3)) && (rows(i)>rowtvalue)
        k=k+1;
        line(k)=i;
    end
end
k
display('有k+1个字符!')
line=line(1:k)

end



提取码字:

function [ acodes ] = extractCodeWord(line,k,ost) %消除水平边缘后的图
display('7.提取码字')
[row,col] = size(ost);
%根据line数组,计算每一层的中心所在的行数到数组Layers[]上
Layers=zeros(1,k+1);
Layers(1)=round(line(1)/2);
for i=1:k-1
    Layers(i+1)=round((line(i)+line(i+1))/2);
end
Layers(k+1)=round((line(k)+row)/2);


minst=zeros(1,k+1);
codes=zeros(k+1,col); %记录此黑色像素和上一个记录黑色像素点的距离
for i=1:k+1
    m=0;
    for j=2:col
        if ost(Layers(i),j)==0  % 黑色,遍历到垂直的边缘
            %----记录此像素和上一个记录点的距离-----%
            if m==0             
                m=m+1;
                codes(i,m)=j;
                temp=j;
            else
                m=m+1;
                codes(i,m)=j-temp;
                temp=j;
            end
            %----记录此像素和上一个记录点的距离-----%
            minst(i)=m;  % 在minst中记录该行的点数
        end
    end
end


%----------------------计算模块的大小-----------------------------------------------------------------------%
%-------计算矩阵code中第一列的平均值,除以8,四舍五入后即为一个模块的长度aunit----------------%
asum=0;
for i=1:k+1
    asum=asum+codes(i,1);
end
aunit = round(asum/(k+1)/8)
%------------------------------------------------------------------------------------------%
%-------------code数组点除以aunit,四舍五入后就能等得到期望的符号码字------------------------%
acodes= zeros(k+1,minst(1));
for i=1:k+1
    for j=1:minst(1)
        acodes(i,j)=round(codes(i,j)/aunit);
    end
end
%------------------------------------------------------------------------------------------%        
acodes
end


## 1. 自动化web服务器日志分析 ### 1.1 需求 **目标:** 编写一个 Shell 脚本,自动分析指定日期的 Web 服务器访问日志,提取基本统计信息。 **场景:** 假设我们的 Web 服务器(如 Apache 或 Nginx)每天生成一个访问日志文件,格式为 `access.log.YYYY-MM-DD`,存储在 `/var/log/webserver/` 目录下。我们需要一个脚本,输入日期,然后分析对应日期的日志文件。 **日志格式 :** ``` <IP> <ident> <user> [DD/Mon/YYYY:HH:MM:SS +ZZZZ] "METHOD /path HTTP/1.X" STATUS BYTES "Referer" "User-Agent" ``` - `$1`: IP 地址 - `$4`: 时间戳 (带方括号) - `$5`: 时区 - `$6`: 请求方法 (GET, POST) - `$7`: 请求路径 - `$8`: HTTP 协议 - `$9`: HTTP 状态码 - `$10`: 返回字节数 具体需求:统计总请求数、不同状态码的请求数、不同请求方法的请求数、请求量最多的前5个IP地址 1. **日志文件检查**:脚本会检查要分析的日志文件是否存在,如果不存在则输出错误信息并退出。 2. **总请求数统计**:使用 `wc -l` 命令统计日志文件的行数,即总请求数。 3. **不同状态码的请求数统计**:使用 `awk` 提取日志中的状态码字段,再通过 `sort`、`uniq -c` 和 `sort -nr` 进行排序和计数。 4. **不同请求方法的请求数统计**:使用 `awk` 提取请求方法字段,经过 `cut` 命令处理后,再进行排序和计数。 5. **请求量最多的前 5 个 IP 地址**:使用 `awk` 提取 IP 地址字段,排序、计数后取前 5 个。 6. **每天的请求数统计**:使用 `awk` 提取日期字段,排序、计数后按日期排序。
09-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值