Ir para conteúdo
Fórum Script Brasil
  • 0

Script organizar tabela saída de dados !


eolocos

Pergunta

Olá,

preciso de ajuda para modificar um script em perl, que gera tabelas baseado na contagem de elementos de colunas de um arquivo de entrada qualquer.

o script, faz a contagem e organiza, mas não consigo modifica-lo para escrever a saída como desejo, para usar tal como entrada no gnuplot e criar os histogramas que preciso nas minhas pesquisas;

o arquivo de entrada tem o seguinte formato ( input.txt )

14 11 22 20 15 06 25 23 29 09
10 10 27 31 10 06 31 02 31 06
13 17 26 29 25 15 23 18 04 27
03 23 05 07 23 09 00 15 27 31
15 12 11 13 11 00 31 26 21 23
13 17 26 29 25 17 23 18 04 27
03 23 05 07 23 09 02 15 27 31

são 10 colunas, cujos valores em cada coluna pode variar de 00 a 31, e número de linhas variáveis, indo de 10 a 1000 !

o arquivo de saída que desejo tem o seguinte formato ( output.txt )

Index C1 C2 C3 C4 C5 C6 C7 C8 C9 C10

00 - 00 00 00 00 00 01 01 00 00 00

01 - 00 00 00 00 00 00 00 00 00 00

02 - 00 00 00 00 00 00 01 01 00 00

..

..

31 - 00 00 00 01 00 00 02 00 01 02

e assim sucessivamente.

o script que possuo gera o seguinte resultado, sem colocar os índices faltantes com valor 00

column 1:
 03 2
 10 1
 13 2
 14 1
 15 1
column 2:
 10 1
 11 1
 12 1
 17 2
 23 2
column 3:
 05 2
 11 1
 22 1
 26 2
 27 1
column 4:
 07 2
 13 1
 20 1
 29 2
 31 1
column 5:
 10 1
 11 1
 15 1
 23 2
 25 2
column 6:
 00 1
 06 2
 09 2
 15 1
 17 1
column 7:
 00 1
 02 1
 23 2
 25 1
 31 2
column 8:
 02 1
 15 2
 18 2
 23 1
 26 1
column 9:
 04 2
 21 1
 27 2
 29 1
 31 1
column 10:
 06 1
 09 1
 23 1
 27 2
 31 2

 

em outras palavras, quero criar uma tabela de saída com tais dados organizados, e onde não houver o índice, preencher com zero na posição correspondente.

 

alguém pode me orientar em como proceder ?

 

script perl:

 

# uso: perl column_values.pl input.txt

# No loop while de nível superior:
# * Loop sobre cada linha dos arquivos de entrada combinados
# * Divida a linha na matriz @Fields
# * Para cada coluna, incremente a estrutura de dados da matriz de hashes do resultado

while (<>) {
    @Fields = split / /;
    for $i ( 0 .. $#Fields ) {
        $result[$i]{$Fields[$i]}++
    };
}

# No nível superior do loop:
# * Loop sobre a matriz de resultados
# * Imprime o número da coluna
# * Obtenha os valores usados nessa coluna
# * Classifique os valores pelo número de ocorrências
# * Classificação secundária com base no valor (por exemplo b vs g vs m vs z)
# * Iterar através do hash de resultado, usando a lista classificada
# * Imprimir o valor e o número de cada ocorrência

for $j ( 0 .. $#result ) {
    print "column $j:\n";
    @values = keys %{$result[$j]};
    @sorted = sort { $result{$b}[$j] <=> $result{$a}[$j]  ||  $a cmp $b } @values;
    for $k ( @sorted ) {
        print " $k $result[$j]{$k}\n"
    }
}

 

agradeço antecipadamente qualquer ajuda e ou orientação.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...