各行の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
ベストアンサー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
しかし、しないでください - 見てくださいシェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?
シェルに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
(しかしそうしないでください)。