Получение «awk: cmd. строка: 1: Неожиданный токен »

Когда я запускаю ниже cmd на Контроллере machine

Controller> echo DateTime Rd_avgMsec Wr_avgMsec; stats --diff --sho --int 60 --perf e2lxsplunkinx02-Hotdata --iosize --from 2016-10-11,00:00:00 --to 2016-10-11,00:03:00 | awk 'BEGIN{c=0} /^[0-9]|_avg/ {if (/^[0-9]/){printf "%s", $1;c++}else{ printf " %s", $NF/1000; c++ ; if(c==3){print ""; c=0}}}'

Я получаю следующий результат:

DateTime Rd_avgMsec Wr_avgMsec
2016-10-11,00:01:00 2.732 0.21
2016-10-11,00:02:00 1.919 0.294
2016-10-11,00:03:00 1.856 0.22

Но когда я пытаюсь выполнить тот же cmd удаленно на машине Controller, я получаю сообщение об ошибке «awk: cmd. line: 1: Unexpected token» . Я пытаюсь запустить cmd удаленно с Linux-машины launchpad01. Может ли кто-нибудь помочь мне исправить ошибку?

[root@launchpad01 ~]# ssh admin@Controller "echo DateTime Rd_avgMsec Wr_avgMsec; stats --diff --sho --int 60 --perf e2lxsplunkinx02-Hotdata --iosize --from 2016-10-11,00:00:00 --to 2016-10-11,00:03:00 | awk 'BEGIN{c=0} /^[0-9]|_avg/ {if (/^[0-9]/){printf "%s", $1;c++}else{ printf " %s", $NF/1000; c++ ; if(c==3){print ""; c=0}}}'"
Warning: Permanently added 'Controller' (RSA) to the list of known hosts.
Password:
DateTime Rd_avgMsec Wr_avgMsec
awk: cmd. line:1: Unexpected token
0
13.10.2016, 13:02
2 ответа

Это проблема с цитированием. В этом случае проще всего решить, запустив конвейер awk локально:

ssh admin@Controller "stats --diff --sho --int 60 --perf e2lxsplunkinx02-Hotdata --iosize --from 2016-10-11,00:00:00 --to 2016-10-11,00:03:00" |\
  awk 'BEGIN{c=0; print "DateTime","Rd_avgMsec","Wr_avgMsec";} /^[0-9]|_avg/ {if (/^[0-9]/){printf "%s", $1;c++}else{ printf " %s", $NF/1000; c++ ; if(c==3){print ""; c=0}}}'
1
28.01.2020, 02:47

Если вы не хотите запускать конвейер awk локально, как предложено в ответе rudimeier , попробуйте избежать двойных кавычек внутри вашей команды:

ssh admin@Controller "echo DateTime Rd_avgMsec Wr_avgMsec; \
stats --diff --sho --int 60 --perf e2lxsplunkinx02-Hotdata --iosize --from 2016-10-11,00:00:00 --to 2016-10-11,00:03:00 | \
awk 'BEGIN{c=0} /^[0-9]|_avg/ {if (/^[0-9]/){printf \"%s\", $1;c++}else{ printf \" %s\", $NF/1000; c++ ; if(c==3){print \"\"; c=0}}}'"
0
28.01.2020, 02:47

Теги

Похожие вопросы