awk列出一个特定的组

我是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   

(假设逗号作为分隔符,我可以SUM特定列

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',' -vk=“3" -vn=“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' 

你可以结合两个条件:( $2 == "b2" && $3 == "c2" )和( from kth - nth columns

 awk -F'whatever' -vk="$k" -vn="$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'是列分隔符
  • -vk="$k" -vn="$n" k and n是列范围。 你可以硬编码或使用shell变量: $k/$n
  • 输出将如下所示:

     sum of column 3 is 300 sum of column 4 is 400 
  • 而且代码没有经过测试

你的文件不是以逗号分隔的,它的标签或空格,所以你不需要-F
这可能会:

 awk '$2=="b2" && $3=="c2" {x+=$4} END {print x}' file 

如果第column 2b2 ,第column 3c2 ,那么总和第column 4和打印值。