获取每行中的第 X 个参数

获取每行中的第 X 个参数

我想获得一行输出中的第二个参数。例如:

ps aux

给我一个输出,其中第三列中包含 cpu-usage %CPU。

如何过滤输出以便只有该列?

我试过

ps aux | cut -f 3

但这是行不通的

也可以看看:过滤一行中的第 X 个元素?

答案1

有多种方法可以实现这一点。这是一个使用的示例awk

ps aux | awk '{print $3}'

$3该命令的参数将print打印每行的第三个字段,默认情况下由一系列空格分隔。

答案2

使用ps格式选项

ps允许您指定自定义输出格式。

ps ax o pcpu

上述命令将返回一列 CPU 使用率数据。

为什么cut不起作用

cut的默认分隔符是制表符。ps在其输出中使用空格,因此您必须使用cut -d' ' -f3来选择第三个字段(如cut所见)。

使用 cut 的问题在于它将与分隔符相邻的任何内容视为字段。由于ps在字段之间打印多个相邻空格,

$ ps aux
...
para␣␣␣␣␣␣␣462␣␣0.0␣␣0.0␣␣13492␣␣1792␣tty1␣␣␣␣␣Ss+␣␣05:52␣␣␣0:00
root␣␣␣␣␣␣␣484␣␣1.8␣␣0.5␣137020␣45112␣?␣␣␣␣␣␣␣␣Ss␣␣␣05:52␣␣␣0:20
para␣␣␣␣␣␣␣490␣␣0.0␣␣0.0␣␣28072␣␣1708␣tty1␣␣␣␣␣S␣␣␣␣05:52␣␣␣0:00
...
$ ps aux | cut -d' ' -f3
...
...

cut如果您询问第三个字段,将打印一列空格。更糟糕的是,每个字段之间输出的空格数ps在行之间并不总是均匀的,因此您不能只使用cut -d' ' -f12您最终会得到如下结果:

...
4.6
0.0
0.0
0.0
0.1
...

相关内容