这是文件:
90 88 80 70
80 90 67 89
70 81 78 85
88 79 90 78
67 66 80 90
80 60 90 89
例如,我需要在第一行中将90、88、80和70一起添加。
这是文件:
90 88 80 70
80 90 67 89
70 81 78 85
88 79 90 78
67 66 80 90
80 60 90 89
例如,我需要在第一行中将90、88、80和70一起添加。
您可以使用awk轻松实现此目标:
$ cat numbers.txt
90 88 80 70
80 90 67 89
70 81 78 85
88 79 90 78
67 66 80 90
80 60 90 89
$ awk '{print $1+$2+$3+$4}' numbers.txt
328
326
314
335
303
319
,
这是一个时髦的纯Bash解决方案:
while IFS=$'\n' read -ra line; do
numbers=($line)
echo $(IFS=+; echo "$((${numbers[*]}))")
done < foo.txt
根据另一个用户的建议,可以缩短为:
while read -ra numbers; do
echo $(IFS=+; echo "$((${numbers[*]}))")
done < foo.txt
根据另一位用户的建议,可以使用复合语句而不是命令替换语句来删除一个echo
:
while read -ra numbers; do
(IFS=+; echo "$((${numbers[*]}))")
done < foo.txt
由于仅将其标记为Bash,因此可能是一个值得解决的方案。
根据@anishsane的建议,在子外壳中无需修改IFS的变体:
while read -r line; do echo $(( 0 $(printf "+%s" $line) )); done < file
,
无论列数如何,以下内容总和。
while IFS="" read -r p || [ -n "$p" ]
do
read -a pa <<< "$p"
{
echo "0"
for i in "${pa[@]}"
do
echo "$i"
echo '+'
done
echo "p"
} | dc
done < filename.dat