代码错误......需要纠正

时间:2012-01-16 15:56:26

标签: bash shell

我正在提取文件第四列中的值并尝试添加它们。

#!/bin/bash
cat tag_FLI1 | awk '{print $4}'>tags
$t=0 
for i in `cat tags`
    do
       $t=$t+$i  (this is the position of trouble) 
    done
echo $t
第6行的

错误。

提前感谢您的时间。

4 个答案:

答案 0 :(得分:3)

如果仅使用awk执行任务:

如果字段用空格分隔:

awk '{ sum += $4 } END { print sum }' tag_FLI1

否则,请使用FS变量,例如:

awk 'BEGIN { FS = "|" } { sum += $4 } END { print sum }' tag_FLI1

答案 1 :(得分:3)

这不是你在bash中算术的方式。要添加两个变量xy的值并将结果存储在第三个变量z中,它应如下所示:

z=$((x + y))

但是,您可以更简单地在awk中执行所有操作,将awk '{print $4}'替换为:

awk '{ sum += $4 } END { print sum }'

awk方法也将正确处理浮点数,bash方法不会。

答案 2 :(得分:1)

这可以在一行中完成:

awk '{sum += $4} END {print sum}' tag_FLI1

但是,如果这是bash的学习练习,请看一下这个例子:

#!/bin/bash
sum=0
while read line; do
    (( sum += $line ))
done < <(awk '{print $4}' tag_FLI1)
echo $sum

您的代码基本上有3个问题:

  1. 使用VAR=...而不是$VAR=...分配变量。请参阅http://tldp.org/LDP/abs/html/varassignment.html
  2. 你对数字的总结是不正确的。有关如何操作的示例,请参阅arithmetic expansion
  3. 没有必要使用中间文件来迭代命令的输出。如上所示使用while循环,但要注意this caveat

答案 3 :(得分:1)

您需要使用数字上下文来添加数字。此外,这里不需要cat,因为awk可以从文件中读取。除非您在其他脚本中使用“tags”,否则无需创建该文件。此外,如果您使用的是bash而不是perl或php,则变量赋值的左侧不应该有“$”。

t=0
while read -r i
do
   t=$((t + i))
done < <(awk '{print $4}' tag_FLI1)
echo "$t"