Awk将csv文件中循环的最后n个元素相加



我想总结一个只有一行的csv文件的最后n元素。

预期的result应为110,请参阅下面的csv文件示例。

在awk函数中,我将bash脚本中传递的值强制转换为int,但它仍然失败。for循环应该对每个元素求和,然后通过awkprint语句将结果分配给sum变量

RWP="/foo/bar/rwp.csv"
DL=";"
function rrwpsh() {
local n="${1}"

local length=$(awk --field-separator=$DL '{ print NF; exit }' $RWP)
local lower_bound=$[$length-$n]

local sum=$(awk --field-separator=$DL -v lower_boundxxx=$lower_bound -v lengthxxx=$length 'BEGIN{lower_boundxxx_int=int(lower_boundxxx);lengthxxx_int=int(lengthxxx);for(j=lower_boundxxx_int;j<=lengthxxx_int;j++)x+=$j;print x}' $RWP)
echo "sum: " $sum
}
let n=3 # example value
result=$(rrwpsh $n)
echo -e "result " $result

csv文件包含数字

20;1;2;100;7;3

来自stdin:

$ echo "20;1;2;100;7;3" | awk -F; -v n=3 '{for(i=0;i<n;i++)s+=$(NF-i);print s}'
110

来自文件:

$ awk -F; -v n=3 '{    # set delimiter and the n value
for(i=0;i<n;i++)    # looping from 0..(n-1)
s+=$(NF-i)      # sum up related fields
print s             # output
}' file

相关内容

  • 没有找到相关文章

最新更新