awk中的语法错误,只有usb()和print()函数

时间:2013-12-23 14:26:17

标签: awk gawk

我尝试了以下命令

ls | awk '{ sub(/.cpp/, " ", $0); print($0); }'

结果

awk: syntax error near line 1
awk: illegal statement near line 1

帮我找到错误

1 个答案:

答案 0 :(得分:3)

每当收到错误消息时:

awk: syntax error near line 1
awk: illegal statement near line 1

这意味着你正在运行破旧的awk。在Solaris上,非常遗憾的是默认的/ bin / awk,你应该使用/ usr / xpg4 / bin / awk。 nawk是另一种选择,但并不接近POSIX合规性。

现在,在您的脚本中:

ls | awk '{ sub(/.cpp/, " ", $0); print($0); }'

将使用未损坏的awk执行正常,您应该将其重写为:

ls | awk '{ sub(/.cpp/, " "); print }'

而不是包含这些命令的默认$ 0参数。

最后 - /.cpp/正在使用'。'作为RE元字符,而不是文字句点字符,并且在第一次在行上看到它时将匹配.cpp,因此如果您有一个名为fooxcppbar.cpp的文件,则sub()会将其转换为{{1} }。那是你要的吗?如果没有,您可能需要这样做:

foo bar.cpp

如果存在,它仍然会在文件名前面ls | awk '{ sub(/\.cpp/, " "); print }' 错误地匹配。