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 )
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
Pergunta
eolocos
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
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.