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