我想获得一行输出中的第二个参数。例如:
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
␣
␣
␣
...