我有一个任务: 编写一个脚本,用于存储在文件中的整数求和。形成一个调用脚本: 例如:总和a.txt 3 4
输入文件可以包含多个整数列。单个列是单独的选项卡或标签。该脚本应该将适当的列相加并将结果写入stdout。 所以,当我们有"总和a.txt 3 4"我们需要添加第三和第四列文件的编号。
所以我这样做:
#!/bin/bash
array1=( "$@" )
let LA=${#array1[@]}-1
awk '{for(i=1;i<=$LA;i++)y+=$'${array1[i]}'; print y}' a.txt
但我有一个错误:awk :: 1unexpected character&#39;。&#39;
请帮助有另一种方法来添加过程调用脚本中给出其编号的列数吗?
答案 0 :(得分:0)
如果您将3个参数传递给sum
#!/bin/bash
awk -v col1=$2 -v col2=$3 '{sum1 += $col1; sum2 += $col2} END{print sum1,sum2}' $1
当脚本被调用为sum a.txt 3 4
时,则
$1 = a.txt
$2 = 3
$4 = 4
修改强>
如果列数可以变化
#!/bin/bash
filename=$1
cols=${@:2:$#}
awk -v c="$cols" '{split(c, cols, " "); for (col in cols) sum[col]+=$col} END{for (i in sum) print sum[i]}' $filename
<强>解释强>
-v c="$cols"
创建一个awk变量c
并传递列表
split(c, cols, " ")
拆分列列表c
以获取数组,cols
for (col in cols) sum[col]+=$col
为cols
数组中的每个列值找到总和,sum[col]+=$col
END{for (i in sum) print sum[i]}
打印sum
数组