【问题标题】:awk scientific notation inputawk 科学计数法输入
【发布时间】:2014-07-01 19:28:17
【问题描述】:

我在让 awk 从文件中读取科学记数法时遇到了一些麻烦,这里是一些示例输入:

  #Plane   Turn   Real    Imaginary
  HOR    1    0.0000e+00    -2.1885e-07
  HOR    1    4.8481e-08    -8.1221e-08
  HOR    1    4.0934e-08    -6.0784e-08
  HOR    1    3.5707e-08    -5.1223e-08
  HOR    1    3.1664e-08    -4.5608e-08
  HOR    1    2.8268e-08    -4.1964e-08
  HOR    1    2.5242e-08    -3.9469e-08
  HOR    1    2.2429e-08    -3.7707e-08
  HOR    1    1.9731e-08    -3.6430e-08
  HOR    1    1.7082e-08    -3.5479e-08

我正在使用 awk 格式化此文件,以便使用以下命令使用 gnuplot 进行绘图:

gnuplot "awk '{if($2==1){printf "%.4e\n",sqrt($3^2+$4^2)}}' bathtub_values.dat" w l

但是算术不能正常工作,经过几次测试后我意识到 awk 似乎无法正确解释输入格式,我该如何指定 awk 使用的格式?

【问题讨论】:

  • 我的 awk 似乎工作正常。你用的是哪一个?你得到什么结果?如果你只做awk '{print $3*10}' file 会发生什么
  • 我得到的整数如下:0 0 40 40 30 30 20 20 20 10 10 10 10 90 60 30 50。我在 Mac OS X 小牛队
  • awk 版本为 20070501
  • awk 的 OSX 版本也不适用于我。我建议你安装 GNU 版本。我也在 OSX 上,我使用 homebrew - 它可以正常工作。我建议你安装homebrew,然后用它来安装gawk
  • 我在 Snow Leopard 中有那个版本的 awk,你的 awk 对我来说可以正常工作,并复制/粘贴所提供的输入:2.1885e-07\n9.4590e-08\n7.3282e-08...。您可以尝试使用 CONVFMTOFMT (man awk) 以及检查您的输入文件是否有奇怪的字符 (cat -vte <filename>)

标签: awk scientific-notation


【解决方案1】:

如果您无权安装不同的 awk,您可以定义并 使用函数解析工程符号

% awk 'function parse_en(eng_num) {
        split(eng_num,en,/[eEdD]/); return en[1]*10**en[2]; }
     $1 !~ /#/ {
        printf "%.4e\n",sqrt(parse_en($3)^2+parse_en($4)^2)}
'  bathtub_values.dat
2.1885e-07
9.4590e-08
7.3282e-08
6.2440e-08
5.5522e-08
5.0597e-08
4.6850e-08
4.3873e-08
4.1430e-08
3.9377e-08
% 

【讨论】:

    猜你喜欢
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2016-05-27
    相关资源
    最近更新 更多