SED 문의 부동 소수점 변수 형식 지정

SED 문의 부동 소수점 변수 형식 지정

메이크파일 레시피의 일부로 일부 텍스트 파일의 몇 줄을 반복적으로 조정하고 싶습니다 txt.in. 특히 공백으로 구분된 두 개의 숫자만 포함된 세 번째 행을 업데이트하고 싶습니다. 형식은 이어야 합니다 0.00 0.00. 따라서 이를 수행할 수 있는지 테스트하기 위해 makefile에 다음 코드를 포함했습니다.

# Makefile to test for-loop
SHELL=/bin/zsh

for:
    for k in 1 2 3; do \
        let n="$$k*0.25"; \
        let m="$$n+0.25"; \
        sed -i "3s/.*/$$n $$m/" txt.in; \
    done

이것이 0.7500000000 1.0000000000최종 결과입니다. 이 작업을 수행하는 더 효율적인 방법이 있을 수 있으며 그에 대해 알고 싶습니다. 하지만 제가 정말로 알고 싶은 것은 서식을 올바르게 지정할 수 있는 방법이 있는지입니다.

답변1

파이프를 통한 출력

sed 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g'

원하는 형식을 얻으려면. 사실상 귀하의 sed선언은 다음과 같이 변경됩니다.

sed -i "3s/.*/$$n $$m/" txt.in | sed -i 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g' txt.in; \

답변2

를 사용할 수도 있습니다 printf. 이렇게 하면 쉘이 정수를 제공하지 않더라도 패딩이 0이 됩니다.

o="$(printf "%.2f\n" "$$m")"
p="$(printf "%.2f\n" "$$n")"
sed -i "3s/.*/$$o $$p/" txt.in;

관련 정보