我有一个csv文件
基因组名称,Resistance_phenotype,阿米卡星,庆大霉素,氨曲南AB1,敏感,抗性,抗性AB2,感病,易感AB3,抗性,抗性,NA
我需要填写第二列,即抗性表型MDR,XDR和易感。为此,我必须匹配抗生素耐药谱,如在第一行、庆大霉素和安曲南都是耐药的,第二列将填充MDR,而在第三列,如果所有3列都是敏感的,则第三列的第二列将充满易感物。
我已经编写了下面提到的代码,它只显示csv文件的列。我被困在该做进一步的事上了。
#!/usr/bin/perl
use strict;
use warnings;
my $file = 'text.csv';
my @data;
open(my $fh, '<', $file) or die "Can't read file '$file' [$!]\n";
while (my $line = <$fh>) {
chomp $line;
my @fields = split(/,/, $line);
print $fields[0], "\n";
#print $fields[1], "\n";
}
close $file;基因组名称,Resistance_phenotype,阿米卡星,庆大霉素,氨曲南AB1,MDR,敏感,抗性,AB2,敏感,易感AB3,MDR,抗药性,抗性,NA
发布于 2019-08-18 15:39:00
使用XS模块。读取一行,为该列分配正确的值,然后再次打印。在示例代码中,您只编写了一列而不是所有列;模块将为您处理所有这些:
use Text::CSV_XS;
my $csv = Text::CSV_XS->new;
# replace *DATA and *STDOUT with whatever filehandles you want
# to read then write.
while( my $row = $csv->getline(*DATA) ) {
$row->[1] = 'Some value';
$csv->say( *STDOUT, $row );
}
__DATA__
Genome Name,Resistance_phenotype,Amikacin,Gentamycin,Aztreonam
AB1,,Susceptible,Resistant,Resistant
AB2,,Susceptible,Susceptible,Susceptible
AB3,,Resistant,Resistant,NA产出如下:
"Genome Name","Some value",Amikacin,Gentamycin,Aztreonam
AB1,"Some value",Susceptible,Resistant,Resistant
AB2,"Some value",Susceptible,Susceptible,Susceptible
AB3,"Some value",Resistant,Resistant,NAhttps://stackoverflow.com/questions/57545580
复制相似问题