como usar o grep -v em um script de espera

2

Eu sou novo em esperar scripts, tentando implementar o comando abaixo (que funciona de outra forma) em um script de expectativa

$ grep -i cps config.cfg | grep -v "//cps" | grep -v "cps := 4.1" | \
    grep -v "cps := 2.2" | grep -v "cps := 5.1" | grep -v "cps := 7.4"| \
    awk '{ SUM += $3} END { print SUM}'

O comando resume a chamada total de cps por segundo em um arquivo de configuração sem contar com determinados valores como 4.1, 2.2, 5.1 e 7.4.

Por causa do comando longo, eu estava pensando em declarar o comando em partes, mas recebi um erro de sintaxe ao executar o script:

set cpscmd1 "grep -i cps traffic.cfg"
set cpscmd2 "| grep -v "//cps" | grep -v "cps := 4.1" | grep -v "cps := 2.2"
set cpscmd3 "| grep -v "cps := 5.1" | grep -v "cps := 7.4"| \
    awk '{ SUM += $3} END { print SUM}''"
...

exp_send "$cpscmd1 $cpscmd2 $cpscmd3 ";exp_send\r

Poderia, por favor, me dar algumas dicas sobre como fazer isso de maneira apropriada?

    
por Julius 31.10.2014 / 06:55

1 resposta

1

Você não diz qual é o erro de sintaxe exato, mas parece que você tem um problema com o escape de aspas. Por exemplo, com cpscmd2 tendo todas as aspas duplas, quais devem ser as cotações inicial e final e quais cotações devem ser consideradas como parte do próprio comando? A maneira de passar aspas como parte do comando é escapá-las com \ :

set cpscmd2 "| grep -v \"//cps\" | grep -v \"cps := 4.1\" | grep -v \"cps := 2.2\" "

(Você também estava perdendo a citação aproximada no final.) Alternativamente, desde que você esteja usando strings literais, você poderia usar aspas simples para elas, tornando-a um pouco mais legível:

set cpscmd2 "| grep -v '//cps' | grep -v 'cps := 4.1' | grep -v 'cps := 2.2' "

Você também precisará escapar do sinal $ em cpscmd3 . Seu \r final deve ser citado também.

Mas eu recomendaria deixar o comando awk manipular os valores que você não quer contar, especificamente omitindo-os da soma. Isso terminaria como:

set cpscmd1 "grep -i 'cps' traffic.cfg | grep -v '//cps' "
set cpscmd2 "| awk '\ !~ /4.1|2.2|5.1|7.4/ { SUM += \} END { print SUM}' "
...

exp_send "$cpscmd1 $cpscmd2 \r"
    
por 31.10.2014 / 08:37