我的数据集(csv文件)包含大量正在进行多项测试的个人。如果任何测试完成,测试日期将在那里。在第二栏中有个人所属组织的代码。我们有大约40个独特的代码/组织。我试图在这个大数据集中检查每个组织(即唯一代码)的所有唯一代码,以获取包含所有组织特定数据的文件。注意我还需要以月 - 年的形式获取日期,而不是日 - 月 - 年。 这里是我的数据集怎么看起来像一个感觉:在perl中应用2个grep条件
Patient,Code,test1,test2,test3
P1,072,,25-Mar-14,
P2,072,29-May-14,,
P3,073,,03-Jan-14,
P4,074,,,16-Feb-14
P5,075,,09-Jul-14,
P6,075,08-Jun-14,,
输出应该是类似的东西: 包含标题,看起来像072文件:
Patient,Code,test1,test2,test3
P1,072,,25-Mar-14,
P2,072,29-May-14,,
与073标题另一个文件看起来类似于:
Patient,Code,test1,test2,test3
P3,073,,03-Jan-14,
等
这里是我写的代码。它会保存唯一的代码并创建一个具有组织特定代码的csv文件,但不会为每个文件填充相应的信息(仅与特定组织有关的数据,并用mm-yy替代dd-mm-yy。任何人都可以告诉我什么是错误的代码?
use feature ':5.12';
use strict;
use warnings;
use autodie;
my $dataset = 'R:/dataset/';
my $output_directory = 'R:/results/';
open my $infh, '<', "$dataset/CH_dataset.csv";
my %codes =();
while (<$infh>) {
chomp;
my @columns = split ",";
print "$columns[1]\n" if !$codes{ $columns[1] }++;
my @unique_codes = keys %scodes;
foreach my $unique_codes (@unique_codes) {
open my $outfh, ">>", "$output_directory/CH_$unique_codes\_v$version.$update.csv";
print $outfh $_
if (/"$unique_codes"/
and s/\d\d\-Jan\-/Jan\-/g | s/\d\d\-Feb\-/Feb\-/g | s/\d\d\-Mar\-/Mar\-/g | s/\d\d\-Apr\-/Apr\-/g
| s/\d\d\-May\-/May\-/g | s/\d\d\-Jun\-/Jun\-/g | s/\d\d\-Jul\-/Jul\-/g | s/\d\d\-Aug\-/Aug\-/g
| s/\d\d\-Sep\-/Sep\-/g | s/\d\d\-Oct\-/Oct\-/g | s/\d\d\-Nov\-/Nov\-/g | s/\d\d\-Dec\-/Dec\-/g);
}
}
感谢您的帮助!
例如一个csv文件,标题中的代码为072,以下内部病人代码test1 test2 test3 P1 072 25-Mar-14 P2 072 29-May-14 – fmfshog 2014-09-05 11:22:11
你为什么在','上进行分割?您的列似乎被空间隔开。 – Toto 2014-09-05 11:22:31
@ M42我的数据集实际上是一种csv格式。我已经编辑过它的样子 – fmfshog 2014-09-05 11:27:28