除非为零或为空,否则awk将在列中转换为十进制

除非为零或为空,否则awk将在列中转换为十进制,awk,Awk,下面的awk执行一个函数,并在它下面生成输出,但我似乎不知道如何仅应用列中的值不是0或null的格式。由于某些字段为空或为null,因此使用零作为值。在我的实际数据中有多个列,这是一个格式示例 文件 awk 期望输出 你能试试下面的吗 awk '$1!=0 && NF{printf "%.10f\n", $1;next} 1' Input_file 运行代码后,将输出以下内容 cat Input_file 1E-010 3.40878806010261E-027 0 blan

下面的awk执行一个函数,并在它下面生成输出,但我似乎不知道如何仅应用列中的值不是0或null的格式。由于某些字段为空或为null,因此使用零作为值。在我的实际数据中有多个列,这是一个格式示例

文件

awk

期望输出


你能试试下面的吗

awk '$1!=0 && NF{printf "%.10f\n", $1;next} 1'  Input_file
运行代码后,将输出以下内容

cat Input_file
1E-010
3.40878806010261E-027
0
blank line here.....
awk '$1!=0 && NF{printf "%.10f\n", $1;next} 1'  file886274524264
0.0000000001
0.0000000000
0
blank..... here..

你能试试下面的吗

awk '$1!=0 && NF{printf "%.10f\n", $1;next} 1'  Input_file
运行代码后,将输出以下内容

cat Input_file
1E-010
3.40878806010261E-027
0
blank line here.....
awk '$1!=0 && NF{printf "%.10f\n", $1;next} 1'  file886274524264
0.0000000001
0.0000000000
0
blank..... here..

或者,您可以使用printf执行一些三值无意义的操作:

或者不使用正则表达式:

awk '{printf (!NF || $1==0)?"0\n":"%.10f\n", $1}' file


$ cat file
1E-010
3.40878806010261E-027
0

5

$ awk '{printf $1~/^0$|^$/?"0\n":"%.10f\n", $1}' file
0.0000000001
0.0000000000
0
0
5.0000000000

或者,您可以使用printf执行一些三值无意义的操作:

或者不使用正则表达式:

awk '{printf (!NF || $1==0)?"0\n":"%.10f\n", $1}' file


$ cat file
1E-010
3.40878806010261E-027
0

5

$ awk '{printf $1~/^0$|^$/?"0\n":"%.10f\n", $1}' file
0.0000000001
0.0000000000
0
0
5.0000000000
0+1是将字符串值转换为包括空字符串在内的数字的技巧


0+$1是将字符串值转换为包括空字符串在内的数字的诀窍。

如果有第5行,您希望在输出中为其设置什么?如果有0.5,你想要什么?该值为5和0.5。这取决于第5行中的值。有数千行根据其中的值进行转换。例如,如果它是0或空白,则它是0,但如果它是科学记数法,则它被转换。谢谢:。请检查我的评论中的编辑A 5或0.5在数据中不可能只有0`空白或科学符号。非常感谢:。如果有第5行,您希望在输出中为其设置什么?如果有0.5,你想要什么?该值为5和0.5。这取决于第5行中的值。有数千行根据其中的值进行转换。例如,如果它是0或空白,则它是0,但如果它是科学记数法,则它被转换。谢谢:。请检查我的评论中的编辑A 5或0.5在数据中不可能只有0`空白或科学符号。非常感谢你:。
awk '{printf (!NF || $1==0)?"0\n":"%.10f\n", $1}' file


$ cat file
1E-010
3.40878806010261E-027
0

5

$ awk '{printf $1~/^0$|^$/?"0\n":"%.10f\n", $1}' file
0.0000000001
0.0000000000
0
0
5.0000000000
awk '{printf (0+$1 > 0 ? "%.8f" : "%d")"\n", $1}' file