For

如何使用循環創建一個對其他列求和的列?

  • October 15, 2020

我想在我的文件中創建一個新列,將每行的第 2 列和第 3 列的值相加。例如我想要

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

你可以做

$ 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內置提供了數組讀取功能,你可以做這樣的事情(in 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

(但也不要那樣做)。

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

引用自:https://unix.stackexchange.com/questions/614735