【发布时间】:2015-02-23 07:08:02
【问题描述】:
我是 shell 脚本的新手。我有一个 CSV 文件,我想按列打印符合某些条件的行的总和
column1 column2 column3 column4 column5....... columnN a1 b1 c1 0.5 50 100 a2 b2 c2 1 25 150 a1 b1 c2 0.5 25 10 a2 b2 c2 2 20 100(假设逗号作为分隔符 我可以对特定列求和
awk -F ',' '{ x = x + $4 } END { print x }'
1) 我如何在从第 k 个到第 N 个的循环中使用它来对具有数值的列求和?
2) 另外我如何有条件地使用它来对匹配某些条件的行的列求和 比如说,column2 是 b2,column3 是 c2? 我可以的
cat file| grep b2 |grep c2| awk...as answer to 1st question
但这太天真了。你能帮我解决以上两个问题吗?
根据我尝试过的以下答案
awk -F’,' -v k=“3" -v n=“6" '$2=="b2" && $3="c2"{for(i=k;i<=n;i++)s[i]+=$i}
END{for(x in s)printf "sum of column %d is %s\n",x,s[x]}’ test.csv
但它给出了语法错误
-bash: syntax error near unexpected token `i=k'
【问题讨论】:
-
命令中的字符看起来像单引号和双引号,但实际上不是:
’vs'and“vs"。 -
错误信息具有误导性。谢谢!
标签: linux bash unix awk scripting