我是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 2
是b2
,第column 3
是c2
,那么总和第column 4
和打印值。