我需要遍历此文件的每一行,在Bash中将每一行的每个值添加在一起

这是文件:

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一起添加。

lnnyynv81 回答:我需要遍历此文件的每一行,在Bash中将每一行的每个值添加在一起

您可以使用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
本文链接:https://www.f2er.com/3140828.html

大家都在问