não obtendo a saída desejada com o comando cut?

3
[root@localhost ~]#  ps aux | grep ata
root        19  0.0  0.0      0     0 ?        S    07:52   0:00 [ata/0]
root        20  0.0  0.0      0     0 ?        S    07:52   0:00 [ata_aux]
root      1655  0.0  2.6  22144 13556 tty1     Ss+  07:53   0:18 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-t1gMCU/database -nolisten tcp vt1
root      3180  0.0  0.1   4312   728 pts/0    S+   14:09   0:00 grep ata
[root@localhost ~]#  ps aux | grep ata | cut -d" " -f 2

[root@localhost ~]#

Eu esperaria uma segunda coluna na saída; mas não conseguindo nada. Alguma idéia?

    
por Ankit 09.04.2013 / 15:07

2 respostas

6

Com -d " " , o separador de campo é um (e apenas um) caractere de espaço. Ao contrário da divisão da palavra shell, cut não trata espaço diferente de qualquer outro caractere. Portanto, cut -d " " -f2 retorna "" em root   19 , assim como retornaria "" para cut -d: -f2 em root:::19 .

Você precisaria apertar os espaços em branco para transformar qualquer sequência de espaço em um espaço:

ps aux | grep ata | tr -s ' ' | cut -d ' ' -f2

Ou use awk em seu modo de geração padrão, ele não usa um separador, mas divide-se na lista de sequências de caracteres que não estão em branco:

ps aux | awk '/ata/{print $2}'

Neste caso, você pode querer usar:

pgrep -f ata

Ou pelo menos:

ps -eo pid= -o args= | awk '/ata/{print $1}'

Para corresponder apenas aos argumentos.

    
por 09.04.2013 / 16:11
3

Uso:

ps aux | awk '/ata/{print $2}'

O comando cut que você está usando não está fornecendo a saída desejada, pois há mais de um espaço entre as colunas.

    
por 09.04.2013 / 15:13

Tags