0
votes

Fichier Filtrer par une valeur unique et la plus grande valeur; Combinez deux tableaux dans le hachage

J'ai besoin d'extraire par genre unique (première partie du nom de l'espèce) dans une colonne, mais avec par le plus grand nombre dans une autre colonne dans un fichier CSV lors de la multiplication du même nom.

Donc, si vous avez plusieurs genêts (même prénom), prenez le plus gros numéro de la dernière colonne pour sélectionner ce qui représentera ce genre.

J'ai extrait les informations dans les tableaux, mais j'ai des problèmes avec la combinaison des deux afin de sélectionner. J'utilisais https://perlmaven.com/unique-values-in-an- Array-in-Perl Pour vous aider, mais je dois inclure le plus grand nombre dans la dernière colonne lorsque vous avez la même situation de genre. xxx

exemple d'entrée: xxx

Sortie souhaitée: xxx


4 commentaires

Pourquoi protopéridinium denticulatum sélectionné et non protoperidinium diverggens ? Ils ont tous les deux 1800 dans la dernière colonne.


Je n'ai besoin que d'un pour représenter ce genre. Donc, si j'ai le même numéro, je viens de choisir au hasard entre les deux ou plus.


Les espèces du même genre sont-elles toujours adjacentes?


Non, pas toujours.


4 Réponses :


1
votes
use Text::CSV_XS qw( );

my $csv = Text::CSV_XS->new({
   auto_diag   => 2,
   binary      => 1,
   quote_space => 0,
});

my %by_genus;
while ( my $row = $csv->getline(\*ARGV) ) {
   my ($genus) = split(' ', $row->[3]);
   $by_genus{$genus} = $row
      if !$by_genus{$genus}
      || $row->[5] > $by_genus{$genus}[5];
}

$csv->say(select(), $_) for values(%by_genus);

0 commentaires

0
votes

Nommer correctement les variables rend le code plus lisible: xxx

L'ordre des lignes de sortie est aléatoire.


3 commentaires

Cela suppose que le dernier champ sera toujours non négatif. (Probablement d'accord, mais vous auriez dû l'avoir mentionné!)


Cela ne gère qu'un sous-ensemble de CSV.


Oui, le danger de deviner la spécification d'une entrée d'échantillon.



-1
votes

pas fantaisie mais obtient le travail effectué xxx

sortie: xxx

ne vois pas une méthode évidente que vous triez votre sortie par


1 commentaires

Pratiquement identique à la réponse de @ Choroba, jusqu'à inutilement ne manipulant pas un sous-ensemble de CSV.



0
votes

Vous pouvez également cette ligne de commande Perl aussi xxx

avec les entrées données dans le fichier cara.txt, la sortie est XXX


0 commentaires