2017-01-01 4 views
0

Я это найти AWK линию, чтобы получить код питона анализа ::Make команда работы находкой трубы AWK в Makefile

$ find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print $0}{s+=$0}END{print s}' 
12 ./gb/__init__.py 
23 ./gb/value_type.py 
40 ./setup.py 
120 ./gb/libcsv.py 
200 
$ 

я пытаюсь поставить его в Makefile ::

$ cat Makefile 
python_count_lines: clean 
    @find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print \$0}{s+=\$0}END{print s}' 

Но это не работает ::

$ make python_count_lines 
awk: line 1: syntax error at or near } 
Makefile:12: recipe for target 'python_count_lines' failed 
make: *** [python_count_lines] Error 2 
$ 

ответ

2

Bertrand Martel правильно, что вам нужно, чтобы избежать знаки доллара от марки, удваивая их, не предварив их спины (см. info here).

Тем не менее, остальная часть этого предложения неверна и не будет работать; во-первых, вы почти никогда не должны использовать функцию shell в рецепте. Во-вторых, с помощью функции info здесь не может работать, потому что в первой строке вы установили оболочку переменная RES равна некоторому значению, то вы пытаетесь напечатать сделать переменную RES во второй строке; не только это, но каждая строка запускается в отдельной оболочке, а также все ссылки на переменные и функции расширяются вперед, прежде чем какая-либо часть рецепта будет передана в оболочку.

Вам просто нужно сделать это:

python_count_lines: clean 
     @find ./ -name '*.py' -exec wc -l {} \; | sort -n| awk '{print $$0}{s+=$$0}END{print s}' 
+0

Вы правы, у меня были некоторые вкладки вопрос, что заставило меня думать, что работает –

 Смежные вопросы

  • Нет связанных вопросов^_^