使用 awk 命令查看

使用 awk 命令查看

您如何观察这样的命令?

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

如果在前面加上“watch”,则会出现以下错误:

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

答案是:使用带有引号的参数的 watch 命令方法是用 \$ 替换 $ 符号以将其转义。但这会给我带来错误:

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

我想在该问题的评论中提出这个问题,但没有足够的积分来发表评论。

类似的问题,对他们有用的答案在这种情况下不起作用:

1)https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch(答案再次转义了 $ 符号)。2
)、3)和 4)已在评论中列出,因为如果没有 10 点声誉,我就不能发布超过 2 个链接。

答案1

有四种方法。

1. 将命令放在双引号中

双引号和美元符号都需要转义:

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

2. 将命令放在单引号中

在单引号内, 和 都不"需要$转义。但是,不可能在单引号字符串中包含单引号。如果我们需要出现单引号,解决方法是结束单引号字符串并添加转义的单引号。\'它看起来像这样:

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

3. 混合方法

结合以上两者,我们将字符串的第一部分放在双引号中,将第二部分放在单引号中:

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

4. 未加引号但完全转义

如果我们没有将命令括在引号中,我们将需要转义所有需要的 shell 活动字符。 其中包括空格、引号、花括号和美元符号:

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

答案2

这是一个老话题,但这个问题永远不会消失。下面是转义 awk 字符 '、$ 和 %:

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

此命令将显示在当前文件夹中创建的较新的“exec_sedsid_*.out”文件的最后 25 行!

快!

相关内容