我正在解析一个CSV文件,其中每一行看起来如下所示。
10998、4499、SLC 27 A5、Q9 Y2 P5、执行编号:0000166、执行编号:0032403、执行编号:0005524、执行编号:0016874、执行编号:0047747、执行编号:0004467、执行编号:0015245、、、、、、、、、、、、、、、、、、、、、、、
每行末尾似乎都有逗号。
我想得到第一个项,在本例中是“10998”,并得到与之相关的GO项的个数。
输出:
10998,7
但实际上显示的是299。我意识到每行总共有303个逗号。而且我找不到一个简单的方法来删除后面的逗号。有人能帮我解决这个问题吗?
谢谢你!
我的代码:
use strict;
use warnings;
open my $IN, '<', 'test.csv' or die "can't find file: $!";
open(CSV, ">GO_MF_counts_Genes.csv") or die "Error!! Cannot create the file: $!\n";
my @genes = ();
my $mf;
foreach my $line (<$IN>) {
chomp $line;
my @array = split(/,/, $line);
my @GO = splice(@array, 4);
my $GO = join(',', @GO);
$mf = count($GO);
print CSV "$array[0],$mf\n";
}
sub count {
my $go = shift @_;
my $count = my @go = split(/,/, $go);
return $count;
}
4条答案
按热度按时间w80xi6nr1#
我会用juanrpozo的解决方案来计算,但是如果你仍然想用你的方法,那么用正则表达式替换去掉逗号。
yzuktlbb2#
我建议用这种更简洁的方式编写程序。
请注意,行
my @data = split /,/, $line
会丢弃尾随的空字段(@data
只有11个字段包含示例数据),因此无论是否事先删除尾随逗号,都会产生相同的结果。jbose2ul3#
可以将
grep
应用于@array
假设
$array[0]
永远不会与/^GO:/
匹配camsedfj4#
对于每行: