awk if else оператор синтаксическая ошибка. Что вызывает это? - PullRequest
0 голосов
/ 11 июня 2019

В выражении awk if else есть синтаксическая ошибка, в результате которой я получил код из другого вопроса и не смог его исправить. Однострочный код Bash для вывода уникальных значений .

Может кто-нибудь исправить утверждение.

awk 'BEGIN {output=0} /Slave_IO_Running.*No/ {output+=1} /Slave_SQL_Running.*No/ {output +=2} END {if(output==3} {print 0} else {if(output==0} {print 3} else {print output}}'

отладочный вывод

awk 'BEGIN {output=0} /Slave_IO_Running.*No/ {output+=1} /Slave_SQL_Running.*No/ {output +=2} END {if(output==3}{print 0} else {if(output==0} {print 3} else {print output}}'
awk: cmd. line:1: BEGIN {output=0} /Slave_IO_Running.*No/ {output+=1} /Slave_SQL_Running.*No/ {output +=2} END {if(output==3}{print 0} else {if(output==0} {print 3} else {print output}}
awk: cmd. line:1:                                                                                                           ^ syntax error
awk: cmd. line:1: BEGIN {output=0} /Slave_IO_Running.*No/ {output+=1} /Slave_SQL_Running.*No/ {output +=2} END {if(output==3}{print 0} else {if(output==0} {print 3} else {print output}}
awk: cmd. line:1:                                                                                                                      ^ syntax error
awk: cmd. line:1: BEGIN {output=0} /Slave_IO_Running.*No/ {output+=1} /Slave_SQL_Running.*No/ {output +=2} END {if(output==3}{print 0} else {if(output==0} {print 3} else {print output}}
awk: cmd. line:1:                                                                                                                                        ^ syntax error
awk: cmd. line:1: BEGIN {output=0} /Slave_IO_Running.*No/ {output+=1} /Slave_SQL_Running.*No/ {output +=2} END {if(output==3}{print 0} else {if(output==0} {print 3} else {print output}}
awk: cmd. line:1:                                                                                                                                                    ^ syntax error
awk: cmd. line:1: BEGIN {output=0} /Slave_IO_Running.*No/ {output+=1} /Slave_SQL_Running.*No/ {output +=2} END {if(output==3}{print 0} else {if(output==0} {print 3} else {print output}}
awk: cmd. line:1:                                                                                                                                                                       ^ syntax error

Ответы [ 2 ]

1 голос
/ 11 июня 2019

if(output==0} и if(output==3} должны заканчиваться закрытой пареной ), а не закрывающей скобкой }.

Вы должны использовать else if для вложенных операторов if, и эти скобки необходимы только для нескольких операций.

END {if(output==3) print 0; else if(output==0) print 3; else print output}

Просто для удовольствия:

END {print output==3? 0: output==0? 3: output}
0 голосов
/ 12 июня 2019

В сообщениях об ошибках есть подсказки, например:

awk: cmd. line:1: ... END {if(output==3}{print 0} else {if(output==0} {print 3} else {print output}}
awk: cmd. line:1:                      ^ syntax error

Это действительно не может быть намного яснее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...