我是gawk的新用户。我试图通过在文件中放入一个小代码然后使该文件可执行来读取跟踪文件。以下是我想要做的事情。
#!/bin/sh
set i = 0
while ($i < 5)
awk 'int($2)=='$i' && $1=="r" && $4==0 {pkt += $6} END {print '$i'":"pkt}' out.tr
set i = `expr $i + 1`
end
之后我运行以下命令:
sh ./test.sh
它说:
syntax error: word unexpected (expecting do)
任何帮助?
答案 0 :(得分:1)
假设您使用的是bash
while
循环的语法:
while test-commands; do consequent-commands; done
要使用<
运算符进行比较,您需要使用双括号,请参阅Shell Arithmetic和Conditional Constructs。
要为代码中使用的变量赋值,只需编写i=0
。
要在awk
中使用-v
的{{1}}选项访问shell变量。
因此你可能会变成这样:
awk
此处i=0
while ((i < 5))
do
awk -v k=$i 'int($2)==k && $1=="r" && $4==0 {pkt += $6} END {print k":"pkt}' out.tr
i=`expr $i + 1`
done
代码中的变量k
具有来自shell的变量awk
的值。
您可以使用$i
或缩短expr $i + 1
$((i + 1))
此外,您可以使用$((++i))
循环,然后您的代码变得更加清晰:
for