linux - 从批处理 Linux 到 Windows 的 awk 和 sed 命令。如何转换?

标签 linux windows bash awk wireshark

在我最近的项目中,我想制作一个脚本来转换 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.

任何人都可以帮我正确格式化吗?提前致谢!

最佳答案

你能尝试用下面的双引号替换 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}"

关于linux - 从批处理 Linux 到 Windows 的 awk 和 sed 命令。如何转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37026058/

相关文章:

python - 从 shell 脚本中表的最后一行中提取值

linux - GCC - 动态依赖

linux - 如何使用 minGW 交叉编译 Haxe/OpenFL 生成的源代码?

linux - 在 Vim 中有复制括号内文本的好方法吗?

c++ - 使用 vs 代码调试文件时,如何将文件传递到我的程序中

bash - 当 find 在路径中间使用通配符时删除目录

linux - 删除用户会强制解锁该用户所有锁定的文件

windows - 在 Windows 终端预览中运行 Clink

ruby - 在 Windows 上的 Ruby 中生成后台进程?

bash/shell 多次读取 LINE