【问题标题】:Awk floating point numbersawk 浮点数
【发布时间】:2015-02-12 19:06:20
【问题描述】:

我有一个 awk 脚本,它检查文件中的所有负值并用 abs 值更改它们。

awk 'BEGIN {OFS=FS="\t"} function abs(x) {return ((x < 0.0) ? -x : x)} { 
  for (column = 1; column <= NF; ++column) { 
    if ($column ~ /[0-9]/ && $column < 0.0) { 
      sub($column, abs($column)) 
    } 
  } 
print 
}'

在文件中,所有值都表示为浮点数,例如 -1000.0,但在我执行 awk 命令后,我得到 1000 而不是 1000.0。

【问题讨论】:

  • 如果您只是删除所有出现的- 符号怎么办? tr -d '-' &lt;filename。如果需要保持格式,(主要是列号),将-替换为&lt;space&gt;tr '-' ' ' &lt; filename
  • 我想这也行;)
  • @anishsane 我猜这个想法的问题是其他非数字字段可能包含连字符。杰罗姆,也许您可​​以向我们展示您输入的代表性样本?
  • 是的,显然它可以包含非数字字段。但如果数据总是数字,那么tr 会快得多。取决于OP的输入数据集...
  • 是的,@anishsane 解决方案可以处理我的数据,我的文件中只有数值和 * 字符。

标签: bash awk


【解决方案1】:

在子上使用mask

sub(sprintf("%d",$column), abs($column))

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多