이와 관련된 이전 게시물을 모두 확인했지만 원하는 방식을 찾을 수 없습니다.
아래와 같이 지수 숫자가 포함된 파일이 있습니다. 어떤 열에 지수 숫자가 있는지 모르겠습니다.
파일 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
.