파일 내에서 숫자 곱하기

파일 내에서 숫자 곱하기

다음과 같은 숫자가 포함된 ASCII 파일이 있습니다.

1 2 3
5 6 9
7 8 9 
. . . 
. . . 
. . . 
. . . 
. . .  etc

각 값에 "3"을 곱하여 이 파일을 업그레이드하고 싶습니다.

3 6 9
15 18 27
21 24 27 
. . . 
. . . 
. . . 
. . . 
. . .  etc

스크립트를 실행한 후 이러한 변경 사항이 업데이트되어 동일한 ASCII 파일에 자동으로 저장되기를 원합니다.

표준 GNU 유틸리티를 사용하여 이를 어떻게 수행할 수 있습니까? 다음을 수행하여 값을 업데이트할 수 있습니다.

while IFS=",$IFS" read d1 d2 d3; do 
echo $(( $d1*3 )) $(( $d2*3 )) $(( $d3*3 )) 
done < file.txt #file.txt is the previous ASCII file

답변1

awk를 사용하세요:

$awk -F" "  '{$1*=3;$2*=3;$3*=3;print}' FILE | sponge FILE
$cat FILE
3 6 9
15 18 27
21 24 27
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

업데이트: sponge프로그램을 사용하여 입력 FILE에 출력을 쓸 수 있습니다.

스폰지는 표준 입력을 읽고 이를 지정된 파일에 씁니다. 쉘 리디렉션과 달리 스폰지는 출력 파일을 열기 전에 모든 입력을 흡수합니다. 이를 통해 동일한 파일에서 읽고 쓰는 파이프라인을 제한할 수 있습니다.

답변2

이 방법으로 새 ​​값을 파일에 저장할 수 있습니다.

awk -F" "  '{$1*=3;$2*=3;$3*=3;print}' FILE | tee FILE

관련 정보