Se tiver um arquivo de texto longo e desejar exibir todas as linhas nas quais um determinado padrão ocorre, eu faço:
grep -n form innsmouth.txt | cut -d : -f1
Agora, tenho uma sequência de números (um número por linha)
Gostaria de fazer uma representação gráfica 2D com a ocorrência no eixo x e o número da linha no eixo y. Como posso conseguir isso?
command-line
graphics
Abdul Al Hazred
fonte
fonte
Respostas:
Você pode usar
gnuplot
para isso:produz algo como
Você pode configurar a aparência do gráfico para o deleite do seu coração, imprimir em vários formatos de imagem, etc.
fonte
gnuplot
ougnuplot-x11
? no primeiro caso, somente fornece saída de arquivo (ou seja, gera arquivos pdf, png etc. ) em vez de gráficos interativos diretamente na tela.seq 100 >seq.dat
e executar de formagnuplot
interativa e no tipo de promptplot "seq.dat"
?Failed to initialize wxWidgets.
no gnuplot-x11 ... Preciso ter um ou outro? ou ambosgnuplot
e podemgnuplot-x11
ser instalados?notitle
à plotagem sem o título.Eu faria isso
R
. Você precisará instalá-lo, mas ele deverá estar disponível em seus repositórios de distribuição. Para sistemas baseados no Debian, executeIsso também deve trazer,
r-base-core
mas se não, corrasudo apt-get install r-base-core
também. Depois deR
instalar, você pode escrever um script R simples para isso:O script acima criará um arquivo chamado
output.pdf
. Eu testei da seguinte forma:Nos dados aleatórios que usei, isso produz:
Não tenho muita certeza do que você deseja traçar, mas isso deve pelo menos apontá-lo na direção certa.
fonte
#!/usr/bin/env Rscript; args <- commandArgs(TRUE); a<-read.table(args[1]); plot(a$V2,a$V1,ylab="line number",xlab="value");
para gerar um Rplots.pdf no mesmo diretório.Se for possível que uma impressão de terminal muito simples seja suficiente e você possa ser satisfeito com eixos invertidos, considere o seguinte:
O gráfico acima apresenta uma tendência invertida em uma escala de 10% para cada ocorrência do padrão 11 na saída de
seq 1000
.Como isso:
Com pontos e contagem de ocorrências, pode ser:
... que imprime ...
Você pode obter os eixos como o seu exemplo com muito mais trabalho e
tput
- você precisaria fazer a\033[A
fuga (ou seu equivalente, como é compatível com o seu emulador de terminal) para mover o cursor em uma linha para cada ocorrência.Se
awk
'sprintf
suportes espaço-estofamento como o POSIX-shellprintf
faz, então você pode usá-lo para fazer o mesmo - e provavelmente muito mais eficiente também. Eu, no entanto, não sei usarawk
.fonte
Melhorar a resposta de Nate para obter saída em PDF e traçar linhas (requer o
rsvg-convert
):fonte
Ou você pode redirecionar os dados stdout através do pipe para um script python personalizado. Isso permitirá uma imensa quantidade de personalização e flexibilidade na análise, pré-processamento e visualização dos dados.
Aqui está um tutorial sobre o que escrevi para fazer exatamente como você pretende. ligação
fonte