awk转换为列中的十进制,除非为零或为空

时间:2018-09-19 13:00:53

标签: awk

下面的curl -X PUT "localhost:9200/_snapshot/s3-snapshot-repo" -H 'Content-Type: application/json' -d' { "type": "s3", "settings": { "bucket": "my_bucket" } } ' 执行一个下面的命令,产生一个输出,我似乎无法弄清楚是如何仅将格式应用于列中的值不是awk或{{1 }}。由于某些字段为空或为零,因此将零用作值。在我的实际数据中,有多列,这是格式的示例。

文件

0

awk

null

所需的输出

1E-010
3.40878806010261E-027
0
blank field

3 个答案:

答案 0 :(得分:3)

请您尝试以下。

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..

答案 1 :(得分:2)

您可以选择对printf进行三元胡扯:

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

或不使用正则表达式:

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

答案 2 :(得分:2)

awk '{printf (0+$1 > 0 ? "%.8f" : "%d")"\n", $1}' file

“ 0 + $ 1”是把字符串值转换为数字(包括空字符串)的技巧。