파일에는 두 개의 숫자 열이 있으며 첫 번째 줄은 다음과 같습니다.
0 0.0
열 1의 숫자를 열 2의 숫자에 추가하고 결과를 정수가 아닌 부동 소수점으로 유지하고 싶습니다. 따라서 합계가 정수이더라도 첫 번째 행의 결과는 0.0이어야 하고 다른 행의 결과는 .0이어야 합니다.
나는 awk를 시도했습니다 :
awk '{printf "%.1g\n", $0=$1+$2}' > sum.txt
소수점 "%.1g\n" 뒤에 한 자리를 유지하라고 지시했지만 여전히 정수 0이 표시됩니다.
답변1
GNU awk 매뉴얼에서는 이것을 볼 수 없지만 예를 들어printf()
함수의 매뉴얼 페이지%g
이것은 glibc에 언급되어 있습니다 .
결과의 소수 부분에서 후행 0을 제거합니다. 소수점은 뒤에 하나 이상의 숫자가 오는 경우에만 나타납니다.
#
또한 다음을 의미하는 "대체 형식" 수정자가 있습니다 .
g 및 G 변환의 경우 후행 0은 결과에서 제거되지 않습니다.
또한 필요에 따라 형식이 %g
자동으로 변경됩니다 1.23e+3
. 정확한해당 필드(점 뒤의 숫자)는 "최대 수량"입니다.유효수g 및 G 변환의 경우" (아니요소수점 이하 자릿수), 다음과 같은 결과를 얻습니다.
printf "%#.1g\n", 0 0.
printf "%#.2g\n", 0 0.0
printf "%#.2g\n", 12 12.
printf "%#.2g\n", 1234 1.2e+03
따라서 소수점을 강제로 표시할 수는 있지만 뒤에 오는 0을 강제로 표시할 수는 없습니다.
또 다른 옵션은 다음을 사용하는 것입니다 %f
.
printf "%.1f\n", 0 0.0
printf "%.1f\n", 1234 1234.0
또는 필요한 경우 점 뒤에 누락된 0을 추가합니다.
a = sprintf("%#.1g", 0); if (substr(a, length(a)) == ".") a = a "0";
답변2
다음 명령을 사용해보십시오
echo "0 0.0"| awk '{sum=$1+$2;printf "%.1f",sum}'
산출
echo "0 0.0"| awk '{sum=$1+$2;printf "%.2f",sum}'
output
0.0