Bash-对于每一行,求和[由参数]指示的列中出现的数字
脚本将适当的列相加(即,每行将所示列中出现的数字相加),创建数字的结果列并将其写入stdout。在没有参数的情况下,“column”默认为第1列 用法:./script.sh文件名[列1…] 这就是每行的num之和Bash-对于每一行,求和[由参数]指示的列中出现的数字,bash,Bash,脚本将适当的列相加(即,每行将所示列中出现的数字相加),创建数字的结果列并将其写入stdout。在没有参数的情况下,“column”默认为第1列 用法:./script.sh文件名[列1…] 这就是每行的num之和 #!/bin/bash if [ $# -lt 2 ] then echo "Usage: ./script.sh filename [column1 column2 ...]" fi filename=$1 shift while read line do sum=0
#!/bin/bash
if [ $# -lt 2 ]
then
echo "Usage: ./script.sh filename [column1 column2 ...]"
fi
filename=$1
shift
while read line
do
sum=0
for num in $line
do
let sum=sum+num
done
echo "Sum: " $sum
done < $filename
#/bin/bash
如果[$#-lt 2]
然后
echo“用法:./script.sh文件名[column1 column2…”
fi
文件名=$1
转移
读行时
做
总和=0
对于$line中的num
做
设sum=sum+num
完成
echo“Sum:$Sum
完成<$filename
如何对每一行的参数[column1 column2..]指示的列中出现的数字求和,并创建数字的结果列并将其写入stdout。请告诉我应该使用什么工具来解决此问题。仅通过扩展现有脚本,类似的内容应该可以工作(未经测试):
#/bin/bash
如果[$#-lt 2];然后
echo“用法:./script.sh文件名[column1 column2…]”&退出1
#退出脚本-无需进一步处理
fi
[!-f$1]&&echo“给定的文件名不是有效的文件,正在退出”&&exit 1
文件名=$1&&shift
而[$#-ge 1];读取所有参数并将它们放入数组
toadd+=(“$1”)和移位
完成
而read-r行;是否从文件中读取行
read-ra专栏请告诉我应该使用什么工具来解决这个问题。awkawk
很好。在没有awk
的情况下,您可以使用一些工具(cut
或sed
)首先提取柱。当您不想循环使用((sum+=i))
添加每个字段的剩余值时,您可以将所有内容连接到一行(tr'\n'
),并再次使用tr
将空格替换为“+”。现在您有了一个字符串,可以|
到bc
。谢谢@George_Vasiliou你的解决方案很有帮助
#!/bin/bash
if [ $# -lt 2 ];then
echo "Usage: ./script.sh filename [column1 column2 ...]" && exit 1
#exit the script - no further processing
fi
[ ! -f $1 ] && echo "Filename given not a valid file-exiting" && exit 1
filename=$1 && shift
while [ $# -ge 1 ];do #Read all args and put them in an array
toadd+=( "$1" ) && shift
done
while read -r line;do #Read line from file
read -ra columns <<<"$line" #split the line into field using an array
sum=0
for i in "${toadd[@]}";do #For items in array $toadd
num="${columns[$i-1]}" #get the corresponding element from array columns
let sum=sum+num
done
echo "Sum: " $sum
done < $filename
exit 0