Мне нужно извлечь по уникальному роду (первая часть названия вида) в одном столбце, но по наибольшему числу в другом столбце в CSV-файле, если есть кратные с тем же именем.
Итак, если у вас несколько родов (одно и то же имя), возьмите наибольшее число в последнем столбце, чтобы выбрать, который будет представлять этот род.
Я извлек информацию в массивы, но у меня возникли проблемы с их объединением для выбора.Я использовал https://perlmaven.com/unique-values-in-an-array-in-perl, чтобы помочь, но мне нужно включить наибольшее число в последний столбец, когда у меня такая же ситуация с родом.
use strict;
use warnings;
open taxa_fh, '<', "$ARGV[0]" or die qq{Failed to open "$ARGV[0]" for input: $!\n};
open match_fh, ">$ARGV[0]_genusLongestLEN.csv" or die qq{Failed to open for output: $!\n};my @unique;
my %seen;
my %hash;
while ( my $line = <taxa_fh> ) {
chomp( $line );
my @parts = split( /,/, $line );
my @name = split( / /, $parts[3]);
my @A = $name[0];
my @B = $parts[5];
@seen{@A} = ();
my @merged = (@A, grep{!exists $seen{$_}} @B);
my @merged = (@A, @B);
@hash{@A} = @B;
print "$line\n";
}
close taxa_fh;
close match_fh;
Пример ввода:
AB179735.1.1711,AB179735.1.1711,278983,Eucyrtidium hexagonatum,0,1600
AB179736.1.1725,AB179736.1.1725,278986,Pterocorys zancleus,0,1763
AB181888.1.1758,AB181888.1.1758,281609,Protoperidinium crassipes,0,1700
AB181890.1.1709,AB181890.1.1709,281610,Protoperidinium denticulatum,0,1800
AB181892.1.1738,AB181892.1.1738,281611,Protoperidinium divergens,0,1800
AB181894.1.1744,AB181894.1.1744,281612,Protoperidinium leonis,0,1500
AB181899.1.1746,AB181899.1.1746,281613,Protoperidinium pallidum,0,1600
AB181902.1.1741,AB181902.1.1741,261845,Protoperidinium pellucidum,0,1750
AB181904.1.1734,AB181904.1.1734,281614,Protoperidinium punctulatum,0,1599
AB181907.1.1687,AB181907.1.1687,281615,Protoperidinium thorianum,0,1600
AB120001.1.1725,AB120001.1.1725,244960,Gyrodinium spirale,0,1500
AB120002.1.1725,AB120002.1.1725,244961,Gyrodinium fusiforme,0,1800
AB120003.1.1724,AB120003.1.1724,244962,Gyrodinium rubrum,0,1700
AB120004.1.1723,AB120004.1.1723,244963,Gyrodinium helveticum,0,1500
AB120309.1.1800,AB120309.1.1800,4442,Camellia sinensis,0,1700
Требуемый вывод:
AB179735.1.1711,AB179735.1.1711,278983,Eucyrtidium hexagonatum,0,1600
AB179736.1.1725,AB179736.1.1725,278986,Pterocorys zancleus,0,1763
AB181890.1.1709,AB181890.1.1709,281610,Protoperidinium denticulatum,0,1800
AB120002.1.1725,AB120002.1.1725,244961,Gyrodinium fusiforme,0,1800
AB120309.1.1800,AB120309.1.1800,4442,Camellia sinensis,0,1700