指数E中的Hive或UNIX输出

时间:2017-11-04 12:25:45

标签: unix awk sed hive printf

我有一个配置单元格查询,它以指数形式(3.52504582E+8)生成一列。在SQL中,我从RDBMS表中获取数值。这两个输出我写入文件并比较UNIX中两个文件的差异以进行验证检查。

有没有办法在hive或UNIX级别将3.52504582E+8转换为352504582,以便验证成功?

Hive Table Sum:3.52504582E+8

RDBMS表总和:352504582

diff <file1> <file2>验证失败。

1 个答案:

答案 0 :(得分:0)

  

有没有办法在hive或者中将3.52504582E + 8转换为352504582   在UNIX级别,验证是否成功?

$ printf "%.f\n" 3.52504582E+8
352504582

$ awk '{print $1+0}' <<< "3.52504582E+8"
352504582

$ awk '{printf("%.f\n",$1)}' <<< "3.52504582E+8"
352504582
  

我需要修改Hive输出文件中的结果。请问   以上只打印或永久更改?该文件将有2   字段和〜分开。 262〜3.52504582E + 8

# if this is your input file
$ cat infile
262~3.52504582E+8

# result after
$ awk 'BEGIN{FS=OFS="~"}{$2+=0}1' infile
262~352504582

<强>解释

  • FS - 输入字段分隔符,OFS - 输出字段分隔符,我们将FSOFS都设置为~

  • $2+=0 awk会自动转换

  • 最后
  • 1执行默认操作,即打印当前/记录/行,print $0。要知道awk如何工作,请尝试awk '1' infile,它将打印所有记录/行,而awk '0' infile则不打印任何内容。除零以外的任何数字都是 true ,这会触发默认行为。