Assista com o comando awk

1

Como você assiste a um comando?

awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt

Precedendo isso com "watch", esse erro é exibido:

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 aspas foi para escapar dos $ signs 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 para essa 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) link (a resposta foi novamente para escapar 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.

    
por user1271772 04.05.2016 / 06:14

1 resposta

4

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\", \, \}'" filename.txt

2. Coloque o comando entre aspas simples

Dentro de aspas simples, nem " nem $ precisam ser escapadas. No entanto, não é possível incluir aspas simples em uma sequência de aspas simples. Se precisarmos de uma aspa simples para aparecer, a solução é finalizar a string com aspas simples e adicionar uma aspas simples com escape, \' . Parece assim:

watch 'awk '\''NR%2==0 {printf "%s %8.0f", $1, $5}'\' filename.txt

3. Abordagem híbrida

Combinando as duas opções 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. Sem aspas, mas com total escape

Se não colocarmos o comando entre aspas, precisaremos escapar de todos os caracteres ativos de shell necessários. Isso inclui espaços, cotações, chaves e cifrões:

watch awk\ \'NR%2==0 \{printf\ \"%s\ %8.0f\",\ \,\ \\}\' filename.txt
    
por 04.05.2016 / 06:46