我想编写一个脚本来总结我在文件中的专栏。他想要作为参数给出的列数。可能有好几个。我不知道如何用 awk 解决这个问题,所以总结了几列。
cat count.txt | awk '{ sum+=$1} END {print sum}'
例如,这段代码对一列求和,那么列数不是恒定的吗?仅取决于用户输入的内容?
例如。我想对第 2、5、1 列或下次 6、3、2 等列进行求和。
答案1
首先,不需要cat
——awk 知道如何读取文件。
您需要使用选项将列作为逗号分隔的字符串传递-v
,然后在 awk 的 BEGIN 块中分割字符串
awk -v cols="2,5,1" '
BEGIN {n = split(cols, ary, /,/); sum=0}
{for (i=1; i<=n; i++) sum += $(ary[i])}
END {print sum}
' count.txt
split
返回生成的元素数量,因此请务必保存此值,以便稍后可以循环遍历数组。