2016-08-11 66 views
0

我在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

回答

3

在makefile中,您需要將美元符號加倍。

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

...因爲否則,'make'將'$ 0'解釋爲一個名爲'0'的變量的引用,它將替換爲該變量的(空)值。命令中的引用對shell來說是有意義的,但對'make'沒有意義。 –

+0

謝謝,就是這樣。我認爲這是我的一個非常愚蠢的錯誤。 –

+0

@JediWolf:發生在每個人身上:-) – choroba