Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Awk正在将“nan”转换为零_Linux_Awk_Printf - Fatal编程技术网

Linux Awk正在将“nan”转换为零

Linux Awk正在将“nan”转换为零,linux,awk,printf,Linux,Awk,Printf,我正试图在一系列地球物理数据中保存“nan”。我使用以下代码作为linux字符串的一部分: awk 'NR>50 {printf "(%d, %d, %d) %f %f %f %F\n",$1,$2,$3*10000,$4,$5,$7,$6}'<$PST 为什么nan会变成零?如何在原始数据中保留nan?有人告诉我,这可能与nan的小写字母有关,而不是nan或nan?在awk中,如果我们对nan字符串进行数学计算,字符串将被转换为零,同样对于printf也是如此。见示例: ken

我正试图在一系列地球物理数据中保存“nan”。我使用以下代码作为linux字符串的一部分:

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

为什么nan会变成零?如何在原始数据中保留nan?有人告诉我,这可能与nan的小写字母有关,而不是nan或nan?

在awk中,如果我们对nan字符串进行数学计算,字符串将被转换为零,同样对于printf也是如此。见示例:

kent$  awk 'BEGIN{n="nan";printf "%d : %f : %s\n",n,n,n}'
0 : 0.000000 : nan
如果要使用printf,则需要动态定义格式%s或%d/%f,最多为$1、$2。。。。您可以使用正则表达式进行检查,例如^[0-9.]+$检查数字不是很严格,正如示例所示,或者与nan进行比较,如tolower$1==nan


您还可以考虑首先用检查来构建字符串,然后在最后打印所有的字符串。

< P>使用GWK的POSIX版本应该遵循肯特的例子

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

nan : nan : NaN

NaN这个词和其他任何字符串一样,只是一个字符串。将其视为任何其他内容都会破坏awk脚本的历史功能

你能在它前面加个符号让gawk知道它是数字而不是字符串吗

$ 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选项查看可能是您想要的:

$ gawk -M 'BEGIN{n="NaN";printf "%d : %f : %s\n",n,n,n}'
nan : nan : NaN
如果所有其他功能都失败了,您可以使用-posix,但这会禁用所有非常有用的特定于gawk的功能,例如gensub,因此最好避免使用它