awk 和 sed 命令从批次 Linux 到 Windows。如何转换?
awk and sed commands from batch Linux to Windows. How to convert it?
在我最近的项目中,我想制作一个脚本来转换 WireShark 输出以显示每个时间范围的字节数。有了这个我得到了工作脚本:
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" '==last {sum += ; next} {
printf("%s %8d bytes/s (%6.2f Mbit/s)\n",last,sum,sum*8/1024/1024);
last=;sum=}'
在 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.
谁能帮我正确设置格式?提前致谢!
您可以尝试用双引号替换 awk
单引号,如下所示
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" '==last {sum += ; next} {
printf("%s %8d bytes/s (%6.2f Mbit/s)\n",last,sum,sum*8/1024/1024);
last=;sum=}'
并使用 \
转义 "
中的双引号
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" "==last {sum += ; next} {
printf(\"%s %8d bytes/s (%6.2f Mbit/s)\n\",last,sum,sum*8/1024/1024);
last=;sum=}"
切勿在 Windows 中从命令行执行 awk 脚本,始终从文件中执行它以避免必须处理 Windows 噩梦般的引用规则。使用 awk 时也不需要 sed。
将此放入 script.awk
:
BEGIN { FS="\t" }
{ sub(/\..*\t/,"\t") }
==last {sum += ; next}
{
printf "%s %8d bytes/s (%6.2f Mbit/s)\n", last, sum, sum*8/1024/1024
last =
sum =
}
并执行为:
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| awk -f script.awk
在我最近的项目中,我想制作一个脚本来转换 WireShark 输出以显示每个时间范围的字节数。有了这个我得到了工作脚本:
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" '==last {sum += ; next} {
printf("%s %8d bytes/s (%6.2f Mbit/s)\n",last,sum,sum*8/1024/1024);
last=;sum=}'
在 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.
谁能帮我正确设置格式?提前致谢!
您可以尝试用双引号替换 awk
单引号,如下所示
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" '==last {sum += ; next} {
printf("%s %8d bytes/s (%6.2f Mbit/s)\n",last,sum,sum*8/1024/1024);
last=;sum=}'
并使用 \
"
中的双引号
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| sed -e 's/\..*\t/\t/' \
| awk -F"\t" "==last {sum += ; next} {
printf(\"%s %8d bytes/s (%6.2f Mbit/s)\n\",last,sum,sum*8/1024/1024);
last=;sum=}"
切勿在 Windows 中从命令行执行 awk 脚本,始终从文件中执行它以避免必须处理 Windows 噩梦般的引用规则。使用 awk 时也不需要 sed。
将此放入 script.awk
:
BEGIN { FS="\t" }
{ sub(/\..*\t/,"\t") }
==last {sum += ; next}
{
printf "%s %8d bytes/s (%6.2f Mbit/s)\n", last, sum, sum*8/1024/1024
last =
sum =
}
并执行为:
./tshark -r dumps/combinedOutput2.pcapng -T fields -e frame.time -e frame.len \
| awk -f script.awk