我有一个包含以下格式数据的文件:
字段1字段2 nCalls持续时间
我的任务是对nCalls和duration字段求和。我到目前为止编写的代码如下:
cat ${file} |\
while read n1 n2 nCalls nDuration
do
#sumCalls=$((${sumCalls} + ${nCalls}))
#sumDuration=$((${sumDuration} + ${nDuration}))
sumCalls=`expr ${sumCalls} + ${nCalls}`
sumDuration=`expr ${sumDuration} + ${nDuration}`
echo "${sumCalls} ${sumDuration}"
echo -n "${appName} ${sumCalls} ${sumDuration}" > temp.txt
done
tail -n1 temp.txt >> ${outFile}
上述两个陈述都不起作用。我得到语法错误。
我的问题是:
1.上述代码我哪里错了?
2.有没有比写入和退出文件更好的方法?
谢谢,
斯利拉姆
答案 0 :(得分:1)
这是为awk
构建的:
cat ${file} | awk '{c = c + $3; d = d + $4} END {print "APPNAME", c, d}'
以下成绩单显示了它的实际效果:
pax$ export appName=xyz
pax$ echo 'a b 1 2
...> a b 3 4
...> a b 5 6' | awk -vAPPNAME=${appName} '{c=c+$3;d=d+$4}END{print APPNAME,c,d}'
xyz 9 12
答案 1 :(得分:1)
Ruby(1.9+)示例
$ ruby -ane 'BEGIN{c=d=0};c+=$F[2].to_i;d+=$F[3].to_i;END{puts "APPNAME, #{c},#{d}"}' file
答案 2 :(得分:1)
如前所述,正确的工具将是awk。
错误:代码很好并且运行(尤其是两个表达式)。 可能的错误: