koc*_*ren 2 linux shell awk grep sed
我试图从"IPCop"总结日志文件中的不同端口的流量,所以我为我的shell编写和命令,但我认为可以优化命令.
首先来自我的日志文件的一行:
01/00:03:16 kernel INPUT IN=eth1 OUT= MAC=xxx SRC=xxx DST=xxx LEN=40 TOS=0x00 PREC=0x00 TTL=98 ID=256 PROTO=TCP SPT=47438 DPT=1433 WINDOW=16384 RES=0x00 SYN URGP=0
Run Code Online (Sandbox Code Playgroud)
现在我用以下Command命令包含端口1433的所有长度的总和
grep 1433 log.dat|awk '{for(i=1;i<=10;i++)if($i ~ /LEN/)print $i};'|sed 's/LEN=//g;'|awk '{sum+=$1}END{print sum}'
Run Code Online (Sandbox Code Playgroud)
我需要for循环,因为LEN-col始终不在同一位置.
有关优化此命令的任何建议吗?
关心雷内
由于我没有代表为Noufal Ibrahims回答添加评论,这是使用Perl的更自然的解决方案.
perl -ne '$sum += $1 if /LEN=(\d+)/; END { print $sum; }' log.dat
Run Code Online (Sandbox Code Playgroud)
@Noufal你可以让perl做所有艰苦的工作;).
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |