Contando e manipulando ocorrências no arquivo de texto (Perl)
Eu tenho um arquivo de texto separado por tabulação que é como
1J L 0.5
1J P 0.4
1J K 0.2
1J L 0.3
1B K 0.7
1B L 0.2
1B P 0.3
1B L 0.6
1B L 0.3
E quero manipulá-lo para obter as seguintes informações:
Para cada elemento na 1ª coluna, conte quantos elementos repetidos existem na segunda coluna e faça a média de todos os números na terceira coluna para cada elemento da segunda coluna. A saída desejada pode ser outro arquivo de texto separado por tabulação, em que "Média" é o número médio desse elemento na 2ª coluna:
1st K# Average L# Average P# Average
1J 1 0.2 2 0.4 1 0.4
1B 1 0.7 3 0.38 1 0.3
Como devo proceder? Pensei em fazer um Hash of Arrays com chave = 1ª coluna, mas não acho que isso seria muito vantajoso.
Também pensei em criar várias matrizes chamadas@L
, @P
, @K
contar as ocorrências de cada um desses elementos, para cada elemento da 1ª coluna; e outras matrizes@Ln
, @Pn
, @Kn
que obteria todos os números para cada um deles. No final, a soma de cada número dividido porscalar @L
me daria o número médio.
Mas meu principal problema é: como posso fazer todo esse processamento para cada elemento da 1ª coluna?
Editar: outra possibilidade (que estou tentando agora) é criar uma matriz de todos os elementos exclusivos da primeira coluna. Então,grep
cada um e faça o processamento. Mas pode haver maneiras mais fáceis?
Edit2: pode acontecer que alguns elementos da segunda coluna não existam para alguns elementos da primeira coluna - problema: divisão por 0. Por exemplo:
1J L 0.5
1J P 0.4
1J K 0.2
1J L 0.3
1B K 0.7
1B L 0.2
1B L 0.3 <- note that this is not P as in the example above.
1B L 0.6
1B L 0.3