파일의 모든 지수를 Linux에서 십진수로 변환하시겠습니까?

파일의 모든 지수를 Linux에서 십진수로 변환하시겠습니까?

이와 관련된 이전 게시물을 모두 확인했지만 원하는 방식을 찾을 수 없습니다.

아래와 같이 지수 숫자가 포함된 파일이 있습니다. 어떤 열에 지수 숫자가 있는지 모르겠습니다.

파일 1.txt

1 499 5e-29 0.33 1.35 46.65
5 999 0.4444 3e-6 0.556 89.444
many more lines

모든 지수를 십진수로 변환하고 싶습니다.

숫자를 변환하고 싶다면 이렇게 할 수 있습니다.

echo 12.34567E-3 | awk '{printf "%5.10f\n", $1}'

그런데 이런 경우에는 어떻게 하는지 아시는 분 계신가요?

미리 감사드립니다!

답변1

각 행의 모든 ​​필드를 반복할 수 있습니다. 필드가 숫자( $i+0==$i)인지, &&( )에 문자가 포함되어 있는지 테스트해 보는 것이 좋을 것 같습니다 e. 따라서 이 필드를 10진수로 수정합니다.

GNU awk 함수는 여기서 사용됩니다 sprintf:

awk '{
    for (i=1;i<=NF;i++) if ($i+0 == $i && $i ~ /e/) $i = sprintf("%.10f", $i)
} 1' file
  • 당신은 무엇이든 사용할 수 있습니다체재.10f거기 들어가는 대신에 .
  • 1끝은 해당 줄로 이동하는 기본 작업을 나타냅니다 print.

관련 정보