For
如何使用循環創建一個對其他列求和的列?
我想在我的文件中創建一個新列,將每行的第 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
內置提供了數組讀取功能,你可以做這樣的事情(inbash
):$ 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