Jump to content
Fórum Script Brasil
  • 0

Script organizar tabela saída de dados !


eolocos

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...