簡體   English   中英

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" '$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}"

永遠不要從 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM