【发布时间】:2016-07-25 00:52:34
【问题描述】:
我正在尝试使用 awk 来修改此文件的第一列:
0.947250 0.000000 0.001000 0.015500 0.177000 0.806500
0.971700 0.000000 0.000100 0.005000 0.102900 0.892000
0.985701 0.000000 0.000000 0.001200 0.054795 0.944006
0.994251 0.000000 0.000000 0.000000 0.022998 0.977002
0.996850 0.000000 0.000000 0.000000 0.012599 0.987401
0.998150 0.000000 0.000000 0.000000 0.007399 0.992601
0.998800 0.000000 0.000000 0.000000 0.004800 0.995200
0.999250 0.000000 0.000000 0.000000 0.003000 0.997000
0.999450 0.000000 0.000000 0.000000 0.002200 0.997800
0.999750 0.000000 0.000000 0.000000 0.001000 0.999000
我需要将第一列中的值转换为 1 值,而其他列保持不变。我正在尝试命令
awk '{ x=1.-$1; print x,$2,$3,$4,$5,$6}' in_file > out_file
但这给了我
1 0.000000 0.001000 0.015500 0.177000 0.806500
1 0.000000 0.000100 0.005000 0.102900 0.892000
1 0.000000 0.000000 0.001200 0.054795 0.944006
1 0.000000 0.000000 0.000000 0.022998 0.977002
1 0.000000 0.000000 0.000000 0.012599 0.987401
1 0.000000 0.000000 0.000000 0.007399 0.992601
1 0.000000 0.000000 0.000000 0.004800 0.995200
1 0.000000 0.000000 0.000000 0.003000 0.997000
1 0.000000 0.000000 0.000000 0.002200 0.997800
1 0.000000 0.000000 0.000000 0.001000 0.999000
我做错了什么?
我也尝试过不同的说法,但都没有奏效。截图如下:
更新
看起来问题出在我的awk 版本(我在OSX 10.9.5 上使用awk 版本20070501)而不是语法。事实上,我下载了gawk,现在一切似乎都很好。所以问题应该是为什么我的 awk 似乎不能正常工作......
【问题讨论】:
-
我无法使用 GNU
awk、OS X 上的默认awk或来自 NetBSD 的nawk重现此问题。awk在什么操作系统上使用? -
@Kusalananda 我在 OSX 上使用默认的 awk:版本 20070501,OSX 10.9.5
-
我有相同的
awk,但在 OS X 10.11.5 上。我无权访问 OS X 10.9.5,因此无法对此进行测试...但是您的命令绝对可以在我的 Mac 上按照您想要的方式运行。 -
@Kusalananda 我安装了 gawk 现在它可以工作了!
-
@EdMorton 通过显式提供小数点来尝试将 int 提升为 float 是相当普遍的做法。他遇到了
1-$1的问题(获取整数1),所以他尝试了1.-$1。这有什么随机性?这就像说$string + 0强制一种语言将$string解释为一个数字。一个完全合理的尝试。