Guarda con il comando awk


1

Come guardi un comando simile?

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

Precedendo questo con "watch" si ottiene questo errore:

awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)

La risposta a: usare il comando watch con un argomento che contiene virgolette è stato per sfuggire ai segni $ sostituendoli con \ $. Ma questo mi dà l'errore:

sh: -c: line 0: syntax error near unexpected token `('
                                                      sh: -c: line 0: 

Volevo porre questo nel commento a quella domanda ma non avevo abbastanza punti per fare commenti.

Domande simili in cui le risposte che hanno funzionato per loro non hanno funzionato in questo caso:

1) https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch (la risposta è stata di nuovo quella di sfuggire a $ sign).
2), 3) e 4) sono elencati nei commenti poiché non posso pubblicare più di 2 link senza 10 punti di reputazione.





Non potrei nemmeno pubblicare più di 2 link nella mia domanda perché ho bisogno di una reputazione di 10 punti per questo. Questo è il motivo per cui li ho pubblicati come commenti
user1271772

Risposte:


4

Esistono quattro approcci.

1. Inserire il comando tra virgolette

Sia le doppie virgolette che i segni del dollaro devono essere sfuggiti:

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

2. Inserire il comando tra virgolette singole

All'interno di virgolette singole, "né è $necessario né essere salvati. Tuttavia, non è possibile includere virgolette singole all'interno di una stringa a virgoletta singola. Se abbiamo bisogno di un single-citazione a comparire, il work-around è quello di terminare la stringa tra apici singoli e aggiungere un singolo citazione sfuggito, \'. Sembra così:

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

3. Approccio ibrido

Combinando entrambe le precedenti, inseriamo la prima parte della stringa tra virgolette doppie e la seconda parte tra virgolette singole:

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

4. Non quotato ma completamente evaso

Se non racchiudiamo il comando tra virgolette, dovremo sfuggire a tutti i caratteri attivi shell necessari. Ciò include spazi, virgolette, parentesi graffe e segni di dollaro:

watch awk\ \'NR%2==0 \{printf\ \"%s\ %8.0f\",\ \$1,\ \$5\}\' filename.txt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.