我正在提取文件第四列中的值並嘗試添加它們。第6行錯誤代碼...需要更正
#!/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行錯誤代碼...需要更正
#!/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
錯誤預先感謝您的寶貴時間。
在僅使用awk
的任務的情況下:
如果字段是用空格分開:
awk '{ sum += $4 } END { print sum }' tag_FLI1
否則,使用FS
變量,如:
awk 'BEGIN { FS = "|" } { sum += $4 } END { print sum }' tag_FLI1
這不是如何你在bash中進行算術運算。從兩個變量x
和y
添加值,並將結果存儲在第三個變量z
,它應該是這樣的:
z=$((x + y))
但是,你可以更簡單地只是盡一切AWK,免去您awk '{print $4}'
有:
awk '{ sum += $4 } END { print sum }'
awk方法也將正確地處理浮點數,而bash方法不會。
+1關於處理FP編號的建議。我們還可以使用'z = $ [x + y]'或者使用'let'或者使用'expr'來進行bash算法。 – 2012-01-16 17:27:46
,可以在短短的一行來完成:
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儘管您的回答正確並且代碼示例很好,但我不建議將新用戶鏈接到ABS。它包含了很多不好的做法。 – jordanm 2012-01-16 16:23:48
您需要使用數字上下文來添加數字。而且,這裏不需要cat,因爲awk可以從文件中讀取。除非您在其他腳本中使用「標籤」,否則不需要創建該文件。另外,如果您使用的是bash而不是perl或php,則在變量賦值的左側不應該有「$」。
t=0
while read -r i
do
t=$((t + i))
done < <(awk '{print $4}' tag_FLI1)
echo "$t"
'awk'的功能。 8-10行代碼可以用簡單的一行代替。 +1 – 2012-01-16 17:38:25