
Como você assiste a um comando?
awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt
Preceder isso com "watch" gera este erro:
awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)
A resposta para:Usando o comando watch com um argumento que contém aspasera escapar dos sinais $ substituindo-os por \$. Mas isso me dá o erro:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0:
Eu queria perguntar isso no comentário daquela pergunta, mas não tinha pontos suficientes para fazer comentários.
Perguntas semelhantes em que as respostas que funcionaram para eles não funcionaram neste caso:
1)https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch(a resposta foi novamente para escapar do sinal $).
2), 3) e 4) estão listados nos comentários, pois não posso postar mais de 2 links sem 10 pontos de reputação.
Responder1
Existem quatro abordagens.
1. Coloque o comando entre aspas duplas
Tanto as aspas duplas quanto os cifrões precisam ser escapados:
watch "awk 'NR%2==0 {printf \"%s %8.0f\", \$1, \$5}'" filename.txt
2. Coloque o comando entre aspas simples
Dentro de aspas simples, nem "
precisa $
ser escapado. No entanto, não é possível incluir aspas simples em uma string entre aspas simples. Se precisarmos que uma aspa simples apareça, a solução alternativa é encerrar a string entre aspas simples e adicionar uma aspa simples com escape, \'
. Se parece com isso:
watch 'awk '\''NR%2==0 {printf "%s %8.0f", $1, $5}'\' filename.txt
3. Abordagem híbrida
Combinando os dois itens acima, colocamos a primeira parte da string entre aspas duplas e a segunda parte entre aspas simples:
watch "awk 'NR%2==0 {printf "'"%s %8.0f", $1, $5}'\' filename.txt
4. Não citado, mas totalmente escapado
Se não colocarmos o comando entre aspas, precisaremos escapar de todos os caracteres ativos do shell necessários. Isso inclui espaços, aspas, chaves e cifrões:
watch awk\ \'NR%2==0 \{printf\ \"%s\ %8.0f\",\ \$1,\ \$5\}\' filename.txt
Responder2
Este é um tópico antigo, mas esse problema nunca irá desaparecer. Aqui está, escape dos caracteres awk ', $ e%:
$ watch -d -n 10 'ls -ltr | grep exec_setsid_ | grep out | tail -1 | awk '\'{ print \$9 }\'' | xargs tail -25'
Este comando mostrará as últimas 25 linhas do arquivo "exec_sedsid_*.out" mais recente que foi criado na pasta atual!
Pronto!