- awk 版本:GNU Awk 3.1.1
- 平台:OpenVMS 8.4-L1
- awk 知识:有限
脚本(Awk 一行)。 注意:OpenVMS参数解析需要引号
gawk "-F" ";" "BEGIN {x = 0} ; x++ {print $0,$1"";""x}" in.file > out.file
**in.file**
file.log;2000
file.log;1999
file.log;1998
file.log;1997
**out.file**
file.log;1999 file.log;2
file.log;1998 file.log;3
file.log;1997 file.log;4
我想要以下内容
file.log;2000 file.log;1
file.log;1999 file.log;2
file.log;1998 file.log;3
file.log;1997 file.log;4
如果我将上面的 awk 命令更改为:...{x = -1}...我得到
**out.file**
file.log;2000 file.log;0
file.log;1998 file.log;2
file.log;1997 file.log;3
我想知道的是
- 其他人可以使用不同的平台对此进行测试,看看它是否会产生相同的输出?
- 是否是我正在运行的 awk 版本有问题,或者我的 awk 脚本存在我不理解的问题
在我看来,它确实应该生成 file.log;1999 file.log;1 行,但事实并非如此。我不知所措,需要一些指导/awk 教育
提前致谢:-)
最佳答案
您需要使用++x
代替x++
。 x++
最初的计算结果为 0
(但将 x
增加到 1),并且 0 为 false,因此不执行该操作;第一行没有打印任何内容。
当您将 x
初始化为 -1
时,会打印第一行,因为 x++
的计算结果为 -1
这是真的;第二个被跳过,因为 x
为 0 等。
您不需要 BEGIN block 。变量自动以零(或空字符串)作为值。事实上,你不需要根据 x 是否为零来触发打印;您只想始终打印 x
的增量值。
因此,在 Mac(类 Unix)系统上,我可以运行:
$ gawk "-F" ";" '{print $0,$1";"++x}' file.in
file.log;2000 file.log;1
file.log;1999 file.log;2
file.log;1998 file.log;3
file.log;1997 file.log;4
$
转换为 VMS 约定,即:
gawk "-F" ";" "{print $0,$1"";""++x}" file.in
关于AWK - 带有计数变量的脚本中的错误或 AWK 实现/版本中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43132458/