【发布时间】: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 '-' <filename。如果需要保持格式,(主要是列号),将-替换为<space>:tr '-' ' ' < filename -
我想这也行;)
-
@anishsane 我猜这个想法的问题是其他非数字字段可能包含连字符。杰罗姆,也许您可以向我们展示您输入的代表性样本?
-
是的,显然它可以包含非数字字段。但如果数据总是数字,那么
tr会快得多。取决于OP的输入数据集... -
是的,@anishsane 解决方案可以处理我的数据,我的文件中只有数值和 * 字符。