【发布时间】:2015-11-07 16:35:58
【问题描述】:
我有两个 CSV 文件。第一个是列表文件,它包含 ID 和名称。例如
1127100,Acanthocolla cruciata
1127103,Acanthocyrta haeckeli
1127108,Acanthometra fusca
第二个是我要交换的内容,如果找到匹配项,则按第一个数字提取该行。每个文件中的第一列数字对应。例如
1127108,1,0.60042
1127103,1,0.819671
1127100,2,0.50421,0.527007
10207,3,0.530422,0.624466
所以我想最终得到这样的 CSV 文件
Acanthometra fusca,1,0.60042
Acanthocyrta haeckeli,1,0.819671
Acanthocolla cruciata,2,0.50421,0.527007
我尝试了 Perl,但一次打开两个文件被证明是一团糟。所以我尝试将其中一个 CSV 文件转换为字符串并以这种方式解析它,但没有奏效。但后来我读到了grep 和其他单行词,但我不熟悉它。用 grep 可以吗?
这是我试过的 Perl 代码
use strict;
use warnings;
open my $csv_score, '<', "$ARGV[0]" or die qq{Failed to open "$ARGV[0]" for input: $!\n};
open my $csv_list, '<', "$ARGV[1]" or die qq{Failed to open "$ARGV[1]" for input: $!\n};
open my $out, ">$ARGV[0]_final.txt" or die qq{Failed to open for output: $!\n};
my $string = <$csv_score>;
while ( <$csv_list> ) {
my ($find, $replace) = split /,/;
$string =~ s/$find/$replace/g;
if ($string =~ m/^$replace/){
print $out $string;
}
}
close $csv_score;
close $csv_list;
close $out;
【问题讨论】:
-
请显示您遇到问题的代码。如果没有,我怀疑,那么你应该离开并写一些,因为 Stack Overflow 是一个知识库,而不是完成工作的免费方式。我们将帮助您解决代码的特定问题,但我们通常不会针对您的规范实施解决方案
-
@Borodin 编辑战! :D
-
乍一看实际上是相当清晰的 Perl 代码。你自己写的吗?
-
我包含了我正在谈论的 perl 代码。
-
这些文件有多大?