Ошибка синтаксического анализа awk в операторе '<' - PullRequest
1 голос
/ 06 ноября 2010

Я пытаюсь создать псевдоним в файле .alias для tcsh. Псевдоним выглядит примерно так:

alias do "grep -iE '<pattern>' <file> | awk '{if($2 < 0)print}'"

Когда я пытаюсь запустить псевдоним, выдается следующая ошибка:

awk: cmd. line:1: {if( < 0.0) print}
awk: cmd. line:1:      ^ parse error

Есть идеи, почему это произошло? Благодарю.

Ответы [ 2 ]

2 голосов
/ 06 ноября 2010

Дайте это попробовать.Вы должны избегать одинарных кавычек и не использовать двойные кавычки.

alias do 'grep -iE '\''pattern'\'' filename | awk '\''{if ( $2 < 0 ) print}'\'''
1 голос
/ 06 ноября 2010

Ну, чтобы начать с командной строки, которую вы предоставляете, это бред:

$ alias do "grep -iE '' | awk '{if($2 < 0)print}'"
bash: alias: do: not found
bash: alias: grep -iE '' | awk '{if( < 0)print}': not found

Если я исправлю это к тому, что, как мне кажется, вы имеете в виду, я увижу это:

$ alias do="grep -iE '' | awk '{if($2 < 0)print}'"
$ alias do
alias do='grep -iE '\'''\'' | awk '\''{if( < 0)print}'\'''

И с этим мы можем видеть, почему вы получаете ошибку разбора. Оболочка съедает 2 доллара до того, как awk ее увидит. Попробуйте вместо этого:

$ alias do="grep -iE '' | awk '{if(\$2 < 0)print}'"
$ alias do
alias do='grep -iE '\'''\'' | awk '\''{if($2 < 0)print}'\'''

Я предполагаю, что в этот момент вы больше не будете получать ошибки синтаксического анализа. (Естественно, я не могу говорить об остальном, поскольку не знаю, что вы используете в качестве входных данных.)

...