2010-11-06 2 views
1

Я пытаюсь создать псевдоним в файле .alias для tcsh. Алиас что-то вроде этого:awk parse error on '<' operator

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

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

alias do 'grep -iE '\''pattern'\'' filename | awk '\''{if ($2 < 0) print}'\''' 
+0

Это сработало .... Большое спасибо .. – zobars

+1

@zobars: Обычно считается вежливым, чтобы «принять» ответ, который сработал лучше всего для вас. И проголосовать за него. –

+0

@JUST, я все с вами .., я новичок здесь, поэтому мне потребовалось некоторое время, чтобы понять, как принять ответ, и я попробовал, но у меня нет достаточной репутации для продолжения. – zobars

1

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

$ 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}'\''' 

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

+0

Спасибо за ваш ответ. Да, я сделал это, потому что реальный пример действительно длинный. Проблема в том, что я попытался сбежать из $ 2 так же, как вы это предлагали, и все еще его съедает оболочка ... проблема в том, что у меня $ 2, я просто попытался и изменился, если ($ 2 <0), если ($ <0), ради тестирования, и когда я делаю, что $ не едят, а 2 доллара ... Любые идеи? – zobars

+1

Символ '=' - это синтаксис Bash (и Bourne-family), и некоторые из ваших цитирования могут зависеть от характеристик этих оболочек. OP использует 'tcsh', который может иметь несколько иные правила кавычек (и не использует' = 'при определении псевдонима. –

+0

@ Dennis: Ах, я не поймал вещь' tcsh' в начале. Мои извинения @zobars: какова бы ни была проблема, это будет связано с правилами кавычек вашей оболочки. Если 'tcsh' позволяет вам увидеть литеральное значение, подобное' bash', посмотрите и посмотрите, что 'tcsh' на самом деле считает псевдоним –

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

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