
[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 ideia ?
Responder1
Com -d " "
, o separador de campo é um (e apenas um) caractere de espaço. Ao contrário da divisão de palavras do shell, cut
não trata o espaço de maneira diferente de qualquer outro caractere. Então cut -d " " -f2
retorna ""
in , assim como root 19
retornaria ""
in .cut -d: -f2
root:::19
Você precisaria apertar os espaços em branco para transformar qualquer sequência de espaço emumespaço:
ps aux | grep ata | tr -s ' ' | cut -d ' ' -f2
Ou use awk
onde em seu modo cuspido padrão, ele não usa um separador, mas se divide na lista de sequências de caracteres não vazios:
ps aux | awk '/ata/{print $2}'
Neste caso, porém, você pode querer usar:
pgrep -f ata
Ou pelo menos:
ps -eo pid= -o args= | awk '/ata/{print $1}'
Para comparar apenas com os argumentos.
Responder2
Usar:
ps aux | awk '/ata/{print $2}'
O cut
comando que você está usando não fornece a saída desejada porque há mais de um espaço entre as colunas.