使用if语句在awk调用时出现语法错误,无法运行
我在makefile中打印出每行文件都有一个简单的awk行。使用if语句在awk调用时出现语法错误,无法运行
awk '{print $0}' ../foo/foo.h >> bar.c
当我运行make时它工作正常。但是在foo.h中有一些我不想结转到bar.c的行。所以我修改了awk。
awk '{if ($0 != "#include \"foobar.h\"") {print $0}}' ../foo/foo.h >> bar.c
但我得到一个语法错误回来。
awk '{if (!= "#include \"foobar.h\"") {print }}' ../foo/foo.h >> bar.c
awk: {if (!= "#include \"foobar.h\"") {print }}
awk: ^syntax error
我猜测它是我的一个简单的错误,但我无法弄清楚。
在makefile中,您需要将美元符号加倍。
awk '{if ($$0 != "#include \"foobar.h\"") {print $$0}}' ../foo/foo.h >> bar.c
...因为否则,'make'将'$ 0'解释为一个名为'0'的变量的引用,它将替换为该变量的(空)值。命令中的引用对shell来说是有意义的,但对'make'没有意义。 –
谢谢,就是这样。我认为这是我的一个非常愚蠢的错误。 –
@JediWolf:发生在每个人身上:-) – choroba
你知道你的第一个'awk'脚本没用吗? – karakfa
不会像'cat ../foo/foo.h | grep -v'#include“foobar.h”'| grep -v'#include“foobar2.h”'>> bar.c'足够了吗?没有编程也没有转义维护。 – svante
为什么'awk'当一个简单的'sed'会做? 'sed'/#include“foobar.h”/ d'../foo/foo.h >> bar.c'。 – alvits