如何使用循环创建一个对其他列求和的列?

如何使用循环创建一个对其他列求和的列?

我想在文件中创建一个新列,对每行第二列和第三列的值求和。例如我想要

1 2 3
4 5 6 
7 8 9

给我

1 2 3 5
4 5 6 11
7 8 9 17

我见过其他帖子用 awk 来做这件事,但我想知道是否有一种方法可以用循环来做这件事,以便它读取每一行并执行任务,然后移动到下一行。我已将我的值保存到 example.txt 并尝试了以下操作,但它不起作用:

for n in [ test1.txt | wc -l ] 
do
    test1.txt$2 + test1.txt$3 > test1.txt$4
done

答案1

你可以做

$ while read a b c; do 
    printf '%d %d %d %d\n' "$a" "$b" "$c" "$((b+c))"
  done < test1.txt
1 2 3 5
4 5 6 11
7 8 9 17

但不要-看为什么使用 shell 循环处理文本被认为是不好的做法?

如果您的 shell 的read内置提供了数组读取功能,您可以执行如下操作(在 中bash):

$ while read -a vals; do 
    vals+=( $((vals[1] + vals[2])) )
    printf '%d %d %d %d\n' "${vals[@]}"
  done < test1.txt
1 2 3 5
4 5 6 11
7 8 9 17

(但也不要这样做)。

答案2

awk '{ $4=$3+$2; print }' inputfile

相关内容