![](/img/trans.png)
[英]How can I combine lines from two files using sed, awk, or other linux commands
[英]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.