2015-02-28 4 views
0

я побежал следующую команду с выхода консоли так ли правильный результат: 0,вывод команды AWK результат в переменной

sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \$4}'" 

однако, если я положил его в скрипт и назначил его в переменной «AWK» выиграл «т больше работать, это просто выходной весь результат„Grep“:

replications=`sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \$4}'"` 
echo "Replications: $replications" 

результат: Replications: Under replicated blocks: 0 , как я могу сделать AWK работу снова только выходной 4 столбца, который 0 вместо целой строки?

ответ

1

Замена заместительной команды, \, а затем $ означает только $. От стандартной POSIX:

В рамках закавыченных стиля подстановки команд, обратная косая черта сохраняет свое буквальное значение, за исключением случаев, когда следуют: «$», «'» или «\» (знак доллара, кавычка, обратная косая черта). (...)

С формой $(command) все символы, следующие за открытой скобкой, соответствуют соответствующей закрывающей скобке. Любой допустимый сценарий оболочки может использоваться для команды, за исключением скрипта, состоящего исключительно из перенаправления, который производит неуказанные результаты.

И еще более явно из Баш страницы руководства:

Когда старый стиль форма кавычка замещения используется, обратный слеш сохраняет свое буквальное значение, за исключением, когда следует $, `, или \. Первый backquote, которому не предшествует обратная косая черта, завершает замену команды. При использовании формы $(command) все символы между круглыми скобками составляют команду; никто не рассматривается специально.

Так самый простой способ заключается в использовании

replications=$(sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \$4}'") 

но

replications=`sudo -H -u hadoop bash -c "/home/hadoop/hadoop-install/bin/hadoop dfsadmin -report | grep 'Under replicated blocks' | awk '{print \\\$4}'"` 

также работает.

+0

спасибо! Я использовал первое предложение, и оно сработало! – user468587

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