我是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'
答案 0 :(得分:2)
您可以结合两个条件:($2 == "b2" && $3 == "c2"
)和(from kth - nth columns
)
awk -F'whatever' -v k="$k" -v n="$n"
'$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]}' file
以上代码:
-F'whatever'
是列分隔符-v k="$k" -v n="$n"
k and n
是列范围。您可以对它们进行硬编码或使用shell变量:$k/$n
输出类似于:
sum of column 3 is 300
sum of column 4 is 400
且代码未经过测试
答案 1 :(得分:1)
您的文件不是逗号分隔,其标签或空格,因此您不需要-F
这可能会:
awk '$2=="b2" && $3=="c2" {x+=$4} END {print x}' file
如果column 2
为b2
且column 3
为c2
,则为column 4
和打印值。