因此,我有幾個大的CSV文件,其中包含幾列和多行(每行6000奇數行和+ -60列),我想將它們拆分爲單獨的CSV文件在給定字符串(數字串之間的不同的行),其中每個文件都將被命名出現的第一列的第一行中的字符串...例如:Perl:在給定的字符串處拆分CSV並使用特定的字符串作爲文件名
Peter B1 C1 D1
A2 B2 C2 D2
A3 B3 C3 D3
END B4 C4 D4
Jack B5 C5 D5
A6 B6 C6 D6
A7 B7 C7 D7
END B8 C8 D8
Billy B9 C9 D9
A10 B10 C10 D10
A11 B11 C11 D11
END B12 C12 D12
所以應該有3名爲Peter,Jack和Billy的文件,END字樣表明這是要爲此文件寫入的最後一行。彼得包含範圍A1(包含單詞彼得)到D4;傑克A5到D8和比利A9到D12。
我有這個至今:
use strict;
use warnings;
### INPUT
my $split_woord = 'END'; #word that signals file to be split
print "Input file: ";
my $file_name = <STDIN>;
my $input_file = "file locataion/$file_name.csv";
### OPEN
open (INPUT, ">", "$input_file") or die "Can't open $file_name: $!\n";
my $name= undef;
while (<INPUT>){
my $line = $_;
my ($a,$b,$c,$d)=split('\,', $line);
until ($a eq $split_word){ #loop until column 1 reads 'END', then restart
$name eq $a; #want to indictae first line
my $output_file = "file_location/$name.csv";
open (OUTPUT, ">>", "$output_file") or die "Can't create $output_file: $!\n";
print OUTPUT "$a,$b,$c,$d\n";
next;
}
}
exit;
我似乎無法得到它的循環正常,而我也在努力使用第一個行/列作爲名稱的文件。任何幫助將非常感謝! TIA
'csplit'是shell命令。必須嘗試嗎? – Ashish
也請檢查SO其他相關問題http://stackoverflow.com/questions/8272017/split-files-based-on-file-content-and-pattern-matching – Ashish
你是否有意在這裏做一個任務? $ name eq $ a; #將顯示第一行$ name = $ a; – jmcneirney