Piping PS output em um arquivo de texto

5

Então, o que eu estou querendo fazer é bem básico ... mas não tenho certeza de como fazer isso. Vamos dizer que eu tenho um programa em execução, mas eu quero canalizar a saída de ps -C "ProgramXX" em um arquivo.

Normalmente em execução ps -C "ProgramXX" Produz algo para o efeito de:

PID TTY TIME            CMD
123 ?   00:00:00    Program1
142 ?   00:00:00    Program1
165 ?   00:00:00    Program1
221 ?   00:00:00    Program1

É sua maneira "simples" de simplesmente obter as primeiras colunas e a quarta coluna (ignorando a linha de título superior) em um arquivo de texto.

Eu acho que você pode executar o ps -c "Program1" > > Data.txt ..... então talvez executar um script para cortar a gordura? Isso seria feito em Bash btw. Talvez usando grep ou algo assim ... mas eu realmente não sei. Isso seria executado várias vezes btw ...... assim data.txt continuaria a crescer.

    
por Gilles 05.10.2011 / 17:22

5 respostas

11

Você pode controlar as colunas que são geradas por ps . Note que a linha de comando exata varia entre os vários tipos de Linux / Unix, mas acredito que o seguinte fará o que você quiser.

ps --no-headers -o pid,comm  -C "ProgramXX" >> Data.txt

A página man de ps(1) listará todas as opções disponíveis para você.

    
por 05.10.2011 / 17:47
6

ps é uma funcionalidade de funcionalidade do exército suíço. Você quer isso

ps -C "ProgramXX" -o pid=,comm=

-o controla as colunas de saída e um = à direita indica que você não deseja um cabeçalho.

Se você escreve assim:

ps -o comm= -o pid= | grep '^ProgramXX'

Em seguida, ele deve funcionar com a maioria das implementações ps . Infelizmente, -C é um GNUísmo.

    
por 05.10.2011 / 18:36
5

pgrep -l Program1 fornecerá a saída desejada.

    
por 05.10.2011 / 19:14
2

Você pode usar cut(1) para fazer isso, por exemplo

ps -C "Program1" | cut -c1-4,20-50 | tail +1

Com as posições de caractere na opção -c de cut definido para recortar os campos certos. tail +1 obtém tudo menos a primeira linha da saída, que cortará a primeira linha.

Você também pode convertê-lo em um arquivo delimitado adicionando sed no pipeline com algo como:

ps -C "Program1" | sed 's/  */,/g' | cut -d, -f1,4 | tail +1

O que lhe dará saída com valores separados por vírgula.

    
por 05.10.2011 / 17:38
1

Em vez de cut , gosto de usar awk porque ele pode extrair palavras delimitadas por espaços sem precisar contar espaços em branco:

ps -C "Program 1" | awk '{print $1,$4}'

Observe que awk não seria uma boa solução para a saída que pode ter um valor em branco em uma coluna ou um valor com várias palavras.

    
por 11.10.2011 / 21:25

Tags