루프를 사용하여 다른 열을 합하는 열을 만드는 방법은 무엇입니까?

루프를 사용하여 다른 열을 합하는 열을 만드는 방법은 무엇입니까?

각 행의 두 번째 열과 세 번째 열의 값을 합산하는 새 열을 파일에 만들고 싶습니다. 예를 들어 내가 원하는

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

(하지만 그렇게 하지 마세요).

답변2

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

관련 정보