2014-05-12 2 views
1

지구 물리학 데이터 배열에 '나노'를 보존하려고 시도하고 있습니다. 리눅스 문자열의 일부로 다음 코드를 사용하고 있습니다 :Awk가 '나노'를 0으로 변환 중입니다.

awk 'NR>50 {printf "(%d, %d, %d) %f %f %f %F\n",$1,$2,$3*10000,$4,$5,$7,$6}'<$PST 

나노가 0으로 변환되는 이유는 무엇입니까? 원본 데이터에서 나노를 어떻게 보존 할 수 있습니까? 나는 그것이 NAN이나 NaN과는 달리 NAN의 소문자와 관련이있을 것이라고 말했습니까?

답변

0

awk에서 Nan 문자열의 수학 계산을 수행하면 printf의 경우에도 문자열이 0으로 변환됩니다. 예를 참조하십시오 당신이 printf를 사용하려면

kent$ awk 'BEGIN{n="nan";printf "%d : %f : %s\n",n,n,n}' 
0 : 0.000000 : nan 

, 당신은 동적으로 $1 ,$2 ...까지 형식 (%s or %d/%f)를 정의 할 필요가있다. 정규식을 사용하여 확인할 수 있습니다 (예 : "^[0-9.]+$" (it is not very strict to check number, just as example) 또는 nantolower($1)=="nan"과 비교하십시오.

당신은 또한 문자열을 (검사와 함께) 빌드 한 다음 끝에 모두 인쇄하는 것을 고려할 수 있습니다. (켄트의 예를 다음) 작동합니다 둔한와 POSIX 버전을 사용

0

gawk --posix 'BEGIN{n="NaN";printf "%d : %f : %s\n",n,n,n}' 

인쇄 밖으로

nan : nan : NaN 
0

단어 "NaN이는"다른 문자열과 같은 단순한 문자열입니다. 다른 것으로 처리하면 역사적인 awk 스크립트 기능이 손상됩니다.

gawk이 문자열이 아닌 숫자임을 알 수 있도록 기호를 추가 할 수 있습니까? 매우 유용한 둔한 고유의 모든 실패 다른 모든 경우

$ gawk -M 'BEGIN{n="NaN";printf "%d : %f : %s\n",n,n,n}' 
nan : nan : NaN 

당신은 --posix를 사용할 수 있지만 그것은 불가능 :

$ gawk 'BEGIN{n="NaN";printf "%d : %f : %s\n",n,n,n}' 
0 : 0.000000 : NaN 

$ gawk 'BEGIN{n="+NaN";printf "%d : %f : %s\n",n,n,n}' 
nan : nan : +NaN 

$ gawk 'BEGIN{n="-NaN";printf "%d : %f : %s\n",n,n,n}' 
nan : nan : -NaN 

또는, -M 옵션을 사용하여 당신이 원하는 것을 할 수있다 (http://www.gnu.org/software/gawk/manual/gawk.html#Gawk-and-MPFR 참조) 기능 (예 : gensub())을 사용하지 않는 것이 좋습니다.

관련 문제