Assistir com comando awk

Assistir com comando awk

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!

informação relacionada