obtém o Xth argumento em cada linha

3

Eu gostaria de obter o segundo argumento em uma linha de saída. Por exemplo:

ps aux

me dá uma saída que contém o cpu-usage% CPU na terceira coluna.

Como posso filtrar a saída para que eu tenha apenas essa coluna?

Eu tentei

ps aux | cut -f 3

mas isso não está funcionando

veja também: Filtrando o Xº elemento em uma linha?

    
por rubo77 13.06.2013 / 11:29

2 respostas

4

Existem várias maneiras de conseguir isso. Aqui está um exemplo usando awk :

ps aux | awk '{print $3}'

O argumento $3 para o comando print imprimirá o terceiro campo, por padrão, delimitado por uma sequência de espaço em branco, de cada linha.

    
por 13.06.2013 / 11:47
4

Usando as opções de formato ps

ps permite que você especifique um formato de saída personalizado.

ps ax o pcpu

O comando acima retornaria uma única coluna de dados de uso da CPU.

Por que cut não funciona

O delmissor padrão de

cut é o caractere de tabulação. ps usa espaços em sua saída, então você teria que usar cut -d' ' -f3 para selecionar o terceiro campo (como cut o vê).

O problema com o uso de corte é que ele visualiza qualquer coisa adjacente a um delimitador como um campo. Como ps imprime vários espaços adjacentes entre os campos,

$ 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 imprimirá uma coluna de espaços se você solicitar o terceiro campo. Para piorar, o número de espaços que ps produz entre cada campo nem sempre é uniforme entre as linhas, portanto, você não pode usar apenas cut -d' ' -f12 . Você acabaria obtendo resultados como este:

...
4.6
0.0
0.0
␣
␣
0.0
0.1
␣
␣
␣
...
    
por 13.06.2013 / 12:05