Kor*_*lic 2 array shell-script bandwidth math
我已经坚持了很长时间了。尝试谷歌搜索,找不到我要找的东西。
我只需要添加一个数组中的所有值。(称为数据包的数组)我已经到了可以添加它们的地步,但是当发生这种情况时,无法在脚本中稍后调用数值。
这是整个脚本,非常简单,只是检查与时间(也就是带宽)相比的数据包数据量。
rawdata=`tcpdump -nn -S -r test.pcap | awk '{print $1" "$NF}'`
time="`echo "$rawdata" | sed -r 's/(.{15}).*/\1/'`"
starttime="`echo "$time" | awk 'NR > 1 { exit }; 1'`"
endtime="`echo "$time" | awk 'END{print}'`"
stime=`date --date="$starttime" +%s`
etime=`date --date="$endtime" +%s`
difftime="echo $(($etime - $stime))"
echo $difftime
echo $addedpackets
echo $sum
echo ------------------------------------
packets="`echo "$rawdata" | awk '{print $2}' | sed 's/[^0-9]*//g'`"
echo ------------------------------------
for i in "${packets[*]}"
do
plus=$(printf '%d+' ${i})0
added="echo $(($plus))"
done
echo ------------------------------------
$added
$difftime
bc -l <<< "$added/$difftime"
echo ------------------------------------
Run Code Online (Sandbox Code Playgroud)
做整个事情awk
,shell 循环不是进行这种处理的正确工具:
tcpdump -tt -nn -S -r test.pcap | awk '
NR == 1 {start = $1}
{total += $NF}
END {
duration = $1 - start
print "total:", total
print "duration:", duration
print "average:", total/duration
}'
Run Code Online (Sandbox Code Playgroud)
请注意,这是如何同时运行 2 个命令,而不是在您的方法中不共享信息的情况下按顺序运行数千个命令。这也正确处理时间戳。
如果出于某种原因,你想要 shell 变量中的那些,你会这样做:
eval "$(
tcpdump -tt -nn -S -r test.pcap | awk '
NR == 1 {start = $1}
{total += $NF}
END {
duration = $1 - start
print "total=" total
print "duration=" duration
print "average=" total/duration
}'
)"
echo "$total $duration $average"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1082 次 |
最近记录: |