我正在提取文件第四列中的值并尝试添加它们。
#!/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行的错误。
提前感谢您的时间。
答案 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中算术的方式。要添加两个变量x
和y
的值并将结果存储在第三个变量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个问题:
VAR=...
而不是$VAR=...
分配变量。请参阅http://tldp.org/LDP/abs/html/varassignment.html 答案 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"