我想在文件中创建一个新列,对每行第二列和第三列的值求和。例如我想要
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