Скрипт Bash с использованием awk для цикла for - PullRequest
3 голосов
/ 01 октября 2010
for i in $LIST
do
  CFG=`ssh $i "cat log.txt|awk '{print $2}'"`
  for j in $CFG
  do
    echo $j
  done
done

Скажем, я хочу напечатать 2-е поле в файле журнала на удаленном хосте пары.В приведенном выше сценарии печать $ 2 не работает.Как я могу это исправить?Благодаря.

Ответы [ 6 ]

4 голосов
/ 01 октября 2010

В зависимости от количества расширений оболочки и типа цитирования требуется несколько экранированных символов обратной косой черты:

awk '{ print $2 }' log.txt # none
ssh $server "awk '{ print \$2 }' log.txt" # one
CFG=`ssh $server "awk '{ print \\$2 }' log.txt"` # two
CFG=$(ssh $server "awk '{ print \$2 }' log.txt") # one (!) 

В качестве хитрости вы можете поставить пробел между знаком доллара и двумя, чтобы предотвратить все расширение $. Awk все равно склеит это:

  CFG=`ssh $i "cat log.txt|awk '{print $ 2}'"`
3 голосов
/ 01 октября 2010

попробуй

for i in $LIST
do
  ssh $i "cat log.txt|awk '{print \$2}'"
done
1 голос
/ 05 октября 2010
for server in $LIST
do
   ssh "$server" 'awk "{print $2}" log.txt'
done
  • Внимательно следите за местоположением single-quote и double-quote.
  • Bash пытается раскрыть переменные (words beginning with $) внутри двойной кавычки (").
  • Одиночная кавычка (') останавливает Bash от поиска переменных внутри.
  • Как предложено user131527 и psj, экранирование $2 с \ также должно работать (в зависимости от конфигурации вашего Bash).
1 голос
/ 01 октября 2010

Убедитесь, что вы экранировали $2 из оболочки - команда ssh, которую вы отправляете прямо сейчас, выглядит примерно так: ssh listvalue cat log.txt|awk '{print }'

0 голосов
/ 10 марта 2017

Мне удалось поставить awk в двойном цикле for

for i in 1 2 3 4;do for j in $\(ls | awk -v I=$i '{print $I}'); echo $j done; done

0 голосов
/ 01 октября 2010

потерять кота.Это бесполезно ..

for server in $LIST
do
  ssh "$server" "awk '{print \$2}' log.txt"
don
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...