在我最近的项目中,我想创建一个脚本来转换WireShark输出以显示每个时间帧的字节数。有了这个,我得到了工作脚本:
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" '$1==last {sum += $2; next} {
printf("%s %8d bytes/s (%6.2f Mbit/s)\n",last,sum,sum*8/1024/1024);
last=$1;sum=$2}'
在Windows(使用GNU Windows的awk和sed命令)中,引号和反斜杠的转义不同。但是我无法以正确的方式转换它并收到以下错误:
awk: {sed -e ^s/\.."\\t/\t/}
awk: ^ backslash not last character on line
tshark: An error occurred while printing packets: Invalid argument.
任何人都可以帮我正确格式化吗?提前谢谢!
答案 0 :(得分:1)
您可以尝试使用双引号替换awk
单引号,如下所示
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" '$1==last {sum += $2; next} {
printf("%s %8d bytes/s (%6.2f Mbit/s)\n",last,sum,sum*8/1024/1024);
last=$1;sum=$2}'
并使用"
\
中的双引号
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" "$1==last {sum += $2; next} {
printf(\"%s %8d bytes/s (%6.2f Mbit/s)\n\",last,sum,sum*8/1024/1024);
last=$1;sum=$2}"
答案 1 :(得分:0)
永远不要在Windows中从命令行执行awk脚本,始终从文件中执行它以避免必须处理Windows噩梦引用规则。当你使用awk时,你也不需要sed。
将其放入script.awk
:
BEGIN { FS="\t" }
{ sub(/\..*\t/,"\t") }
$1==last {sum += $2; next}
{
printf "%s %8d bytes/s (%6.2f Mbit/s)\n", last, sum, sum*8/1024/1024
last = $1
sum = $2
}
并将其执行为:
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| awk -f script.awk