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;

관련 정보