큰 숫자를 과학적 표기법으로 변환하는 방법

큰 숫자를 과학적 표기법으로 변환하는 방법

저는 매우 큰 값을 가진 열이 포함된 파일을 작업하고 있습니다.

(예: 40자리: 646512354651316486246729519751795724672467596754627.06843 등...)

숫자를 과학적 표기법으로 표시하고 싶지만 점 뒤에 3~4자리 숫자만 있어야 합니다. sed내 파일에 나타나는 모든 번호에 대해 이를 사용하거나 수행할 수 있는 방법이 있습니까 ?

답변1

쉘에는 아마도 printf숫자 형식을 지정하는 데 사용할 수 있는 내장 함수가 있을 것입니다.

$ type printf
printf is a shell builtin
$ printf "%.3e\n" 646512354651316486246729519751795724672467596754627.06843
6.465e+50
$ printf "%.4e\n" 646512354651316486246729519751795724672467596754627.06843
6.4651e+50
$ _

그렇지 않은 경우 일반적으로 사용 가능한 전용 바이너리가 있습니다 printf.

$ which printf
/usr/bin/printf
$ _

답변2

특정 열만 변환하려는 경우 awk유용합니다 .

$ cat ip.txt
foo 64651235465131648624672951975 123
bar 3452356235235235 xyz
baz 234325236452352352345234532 ijkls

$ # change only second column
$ awk '{$2 = sprintf("%.3e", $2)} 1' ip.txt
foo 6.465e+28 123
bar 3.452e+15 xyz
baz 2.343e+26 ijkls

관련 정보