Mit dem awk-Befehl ansehen

Mit dem awk-Befehl ansehen

Wie beobachten Sie einen Befehl wie diesen?

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

Wenn Sie davor „watch“ setzen, tritt dieser Fehler auf:

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

Die Antwort auf:Verwenden des Watch-Befehls mit einem Argument, das Anführungszeichen enthältwar, die $-Zeichen durch \$ zu ersetzen. Aber das gibt mir den Fehler:

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

Ich wollte dies im Kommentar zu dieser Frage fragen, hatte aber nicht genügend Punkte, um Kommentare abzugeben.

Ähnliche Fragen, bei denen die für sie passenden Antworten in diesem Fall nicht funktionierten:

1)https://askubuntu.com/questions/500217/wie-man-piped-command-for-watch-richtig-zitiert(Die Antwort bestand erneut darin, das $-Zeichen zu umgehen.)
2), 3) und 4) werden in den Kommentaren aufgeführt, da ich ohne 10 Reputationspunkte nicht mehr als 2 Links posten kann.

Antwort1

Es gibt vier Ansätze.

1. Setzen Sie den Befehl in Anführungszeichen

Sowohl die Anführungszeichen als auch die Dollarzeichen müssen maskiert werden:

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

2. Setzen Sie den Befehl in einfache Anführungszeichen

Innerhalb von einfachen Anführungszeichen müssen weder "noch $maskiert werden. Es ist jedoch nicht möglich, einfache Anführungszeichen in eine Zeichenfolge in einfachen Anführungszeichen einzuschließen. Wenn ein einfaches Anführungszeichen erforderlich ist, besteht die Problemumgehung darin, die Zeichenfolge in einfachen Anführungszeichen zu beenden und ein maskiertes einfaches Anführungszeichen, , hinzuzufügen \'. Es sieht folgendermaßen aus:

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

3. Hybrider Ansatz

Indem wir die beiden oben genannten Schritte kombinieren, setzen wir den ersten Teil der Zeichenfolge in doppelte Anführungszeichen und den zweiten Teil in einfache Anführungszeichen:

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

4. Nicht zitiert, aber vollständig entkommen

Wenn wir den Befehl nicht in Anführungszeichen setzen, müssen wir alle benötigten Shell-aktiven Zeichen maskieren. Dazu gehören Leerzeichen, Anführungszeichen, geschweifte Klammern und Dollarzeichen:

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

Antwort2

Dies ist ein alter Thread, aber dieses Problem wird nie verschwinden. Hier ist es, entkommen Sie den awk-Zeichen ', $ und %:

$ watch -d -n 10 'ls -ltr | grep exec_setsid_ | grep out | tail -1 | awk '\'{ print \$9 }\'' | xargs tail -25'

Dieser Befehl zeigt die letzten 25 Zeilen der neueren Datei „exec_sedsid_*.out“, die im aktuellen Ordner erstellt wurde!

Sofort!

verwandte Informationen