Observe que a tr -s ' '
opção não removerá nenhum espaço inicial. Se sua coluna estiver alinhada à direita (como com ps
pid) ...
$ ps h -o pid,user -C ssh,sshd | tr -s " "
1543 root
19645 root
19731 root
Em seguida, o corte resultará em uma linha em branco para alguns desses campos se for a primeira coluna:
$ <previous command> | cut -d ' ' -f1
19645
19731
A menos que você o preceda com um espaço, obviamente
$ <command> | sed -e "s/.*/ &/" | tr -s " "
Agora, para este caso particular de números pid (não nomes), existe uma função chamada pgrep
:
$ pgrep ssh
Funções Shell
No entanto, em geral, ainda é possível usar funções do shell de maneira concisa, porque há uma coisa interessante sobre o read
comando:
$ <command> | while read a b; do echo $a; done
O primeiro parâmetro a ser lido a
,, seleciona a primeira coluna e, se houver mais, todo o resto será colocado b
. Como resultado, você nunca precisa de mais variáveis do que o número de sua coluna +1 .
Então,
while read a b c d; do echo $c; done
irá então imprimir a 3ª coluna. Conforme indicado em meu comentário ...
Uma leitura canalizada será executada em um ambiente que não passa variáveis para o script de chamada.
out=$(ps whatever | { read a b c d; echo $c; })
arr=($(ps whatever | { read a b c d; echo $c $b; }))
echo ${arr[1]}
A Solução Array
Então, terminamos com a resposta de @frayser, que é usar a variável shell IFS, que tem como padrão um espaço, para dividir a string em um array. Porém, ele só funciona no Bash. Dash e Ash não apóiam isso. Tive muita dificuldade em dividir uma string em componentes em uma coisa do Busybox. É fácil obter um único componente (por exemplo, usando awk) e, em seguida, repeti-lo para cada parâmetro de que você precisa. Mas então você acaba chamando awk repetidamente na mesma linha, ou repetidamente usando um bloco de leitura com eco na mesma linha. O que não é eficiente nem bonito. Então você acaba dividindo usando ${name%% *}
e assim por diante. Faz você ansiar por algumas habilidades em Python porque, na verdade, o script de shell não é mais tão divertido se metade ou mais dos recursos com os quais você está acostumado se foram. Mas você pode assumir que mesmo o python não seria instalado em tal sistema, e não foi ;-).