use*_*772 4 linux bash awk command-line watch
你如何看待一个命令?
awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt
Run Code Online (Sandbox Code Playgroud)
在此之前加上“watch”给出了这个错误:
awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
答案是:使用带有引号的参数的 watch 命令是通过将 $ 符号替换为 \$ 来对 $ 符号进行转义。但这给了我错误:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0:
Run Code Online (Sandbox Code Playgroud)
我想在对该问题的评论中提出这个问题,但没有足够的分数来发表评论。
在这种情况下,对他们有用的答案不起作用的类似问题:
1)https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch(答案再次转义$符号)。
2)、3) 和 4) 列在评论中,因为我不能在没有 10 点声誉的情况下发布超过 2 个链接。
有四种方法。
双引号和美元符号都需要转义:
watch "awk 'NR%2==0 {printf \"%s %8.0f\", \$1, \$5}'" filename.txt
Run Code Online (Sandbox Code Playgroud)
在单引号内,既不需要"也不$需要转义。但是,不能在单引号字符串中包含单引号。如果我们需要出现单引号,解决方法是结束单引号字符串并添加一个转义的单引号\'. 它看起来像这样:
watch 'awk '\''NR%2==0 {printf "%s %8.0f", $1, $5}'\' filename.txt
Run Code Online (Sandbox Code Playgroud)
结合以上两者,我们将字符串的第一部分放在双引号中,将第二部分放在单引号中:
watch "awk 'NR%2==0 {printf "'"%s %8.0f", $1, $5}'\' filename.txt
Run Code Online (Sandbox Code Playgroud)
如果我们不将命令括在引号中,我们将需要转义所有需要的 shell 活动字符。这包括空格、引号、花括号和美元符号:
watch awk\ \'NR%2==0 \{printf\ \"%s\ %8.0f\",\ \$1,\ \$5\}\' filename.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5357 次 |
| 最近记录: |