【发布时间】:2015-11-27 04:20:56
【问题描述】:
我可能会以错误的方式解决这个问题,但我已经尝试了每一种语法,但我遇到了最接近的错误。
我有一个日志文件,我想在其中过滤一组行,如下所示:
Files : 1 1 1 1 1
Files : 3 3 4 4 5
Files : 10 4 2 3 1
Files : 254 1 1 1 1
我所拥有的代码将让我明白这一点,但是,我想使用 awk 来执行所有第一个数字列的加法,在这种情况下给出 268 作为输出(然后在其他列上执行类似的任务)。
我尝试将 awk 输出通过管道传输到循环中以执行最后一步,但它不会添加值,从而引发错误。我认为这可能是由于 awk 将条目作为字符串处理,但由于 bash 不是强类型的,所以没关系?
反正代码是:
x=0;
iconv -f UTF-16 -t UTF-8 "./TestLogs/rbTest.log" | grep "Files :" | grep -v "*.*" | egrep -v "Files : [a-zA-Z]" |awk '{$1=$1}1' OFS="," | awk -F "," '{print $4}' | while read i;
do
$x=$((x+=i));
done
错误信息:
-bash: 0=1: command not found
-bash: 1=4: command not found
-bash: 4=14: command not found
-bash: 14=268: command not found
我尝试了几种不同的加法语法,但我觉得这与我试图提供的内容有关,而不是加法本身。 目前这只是整数值,但我也希望用浮点数来执行它。
非常感谢任何帮助,我相信有一种不那么复杂的方法来实现这一点,仍在学习中。
【问题讨论】:
-
您分配给这样的变量:
x=$((x+=i))。那就是说这行不通,因为您的任务在子外壳中。有关更多信息,请参阅stackoverflow.com/q/16854280/258523。 -
我认为这与此类似,我在 PoSH 中做过类似的事情,我通常作弊,在下一次管道迭代中将 $_ 分配给临时变量。我不知道如何在 Bash 中完成 - 感谢您的链接,它非常有帮助!
标签: bash variables awk floating-point addition