
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!