使用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 

我猜测它是我的一个简单的错误,但我无法弄清楚。

+0

你知道你的第一个'awk'脚本没用吗? – karakfa

+0

不会像'cat ../foo/foo.h | grep -v'#include“foobar.h”'| grep -v'#include“foobar2.h”'>> bar.c'足够了吗?没有编程也没有转义维护。 – svante

+0

为什么'awk'当一个简单的'sed'会做? 'sed'/#include“foobar.h”/ d'../foo/foo.h >> bar.c'。 – alvits

在makefile中,您需要将美元符号加倍。

awk '{if ($$0 != "#include \"foobar.h\"") {print $$0}}' ../foo/foo.h >> bar.c 
+0

...因为否则,'make'将'$ 0'解释为一个名为'0'的变量的引用,它将替换为该变量的(空)值。命令中的引用对shell来说是有意义的,但对'make'没有意义。 –

+0

谢谢,就是这样。我认为这是我的一个非常愚蠢的错误。 –

+0

@JediWolf:发生在每个人身上:-) – choroba