Deutsch
Germany.ruФорумы → Архив Досок→ Linux & Co

Perl

601  
  паскуда коренной житель06.04.11 17:51
06.04.11 17:51 
дорогие линуксоиды!
среди вас масса знатоков перла. помогите, пожалуйста, составить скрипт следующего содержания:
есть файл, содержащий 5 колонок цифр. колонки периодически прерываются строкой. нужно разделить весь файл на отдельные секции от строки до строки, ИСКЛЮЧАЯ саму строку и записать каждую секцию в отдельный файл.
примерно такой вид файла:
0.5271018E+00 0.3000000E+00 0.3922903E+02 0.2287409E+02 0.1130157E+01
0.5390814E+00 0.3000000E+00 0.3930579E+02 0.2452473E+02 0.1129880E+01
0.5510610E+00 0.3000000E+00 0.3914523E+02 0.2128597E+02 0.1130461E+01
0.5630406E+00 0.3000000E+00 0.3904968E+02 0.1738770E+02 0.1130807E+01
0.5750201E+00 0.3000000E+00 0.3903104E+02 0.1958932E+02 0.1130874E+01
0.5870000E+00 0.3000000E+00 0.3833472E+02 0.1696489E+02 0.1133402E+01
50 50 hx #2
0.0000000E+00 0.0000000E+00 0.4393939E+02 -0.5029186E+01 0.1113370E+01
0.1371429E-01 0.0000000E+00 0.4458670E+02 -0.2310062E+00 0.1111101E+01
0.2742857E-01 0.0000000E+00 0.4347031E+02 0.1117820E+01 0.1115019E+01
0.4114286E-01 0.0000000E+00 0.4379453E+02 0.2181791E+01 0.1113878E+01
0.5485714E-01 0.0000000E+00 0.4447989E+02 0.2834043E+01 0.1111475E+01
50 50 hx #3
0.0000000E+00 0.0000000E+00 0.4393939E+02 -0.5029186E+01 0.1113370E+01
0.1371429E-01 0.0000000E+00 0.4458670E+02 -0.2310062E+00 0.1111101E+01
0.2742857E-01 0.0000000E+00 0.4347031E+02 0.1117820E+01 0.1115019E+01
0.4114286E-01 0.0000000E+00 0.4379453E+02 0.2181791E+01 0.1113878E+01
0.5485714E-01 0.0000000E+00 0.4447989E+02 0.2834043E+01 0.1111475E+01
50 50 hx #4
0.0000000E+00 0.0000000E+00 0.4393939E+02 -0.5029186E+01 0.1113370E+01
0.1371429E-01 0.0000000E+00 0.4458670E+02 -0.2310062E+00 0.1111101E+01
0.2742857E-01 0.0000000E+00 0.4347031E+02 0.1117820E+01 0.1115019E+01
0.4114286E-01 0.0000000E+00 0.4379453E+02 0.2181791E+01 0.1113878E+01
0.5485714E-01 0.0000000E+00 0.4447989E+02 0.2834043E+01 0.1111475E+01
#1 
BSDLamer Хвостатый Carpal Tunnel06.04.11 23:39
BSDLamer
NEW 06.04.11 23:39 
в ответ паскуда 06.04.11 17:51
обязательно на perl ? Попробуй csplit, оно как раз для этого и предназначено
0001, 0010, 0011, 0100, 0101, вышел зайчег погулядь
#2 
BSDLamer Хвостатый Carpal Tunnel06.04.11 23:46
BSDLamer
NEW 06.04.11 23:46 
в ответ паскуда 06.04.11 17:51
еще пара вариантов
http://6v8.gamboni.org/Spliting-files-with-a-regular.html это на perl
www.unix.com/shell-programming-scripting/70227-split-file-based-pattern-a... тут 3 варианта, perl, awk, csplit
не проверял
0001, 0010, 0011, 0100, 0101, вышел зайчег погулядь
#3 
  паскуда коренной житель07.04.11 08:13
NEW 07.04.11 08:13 
в ответ BSDLamer 06.04.11 23:39
обязательно... таковы условия.
я уже написал, топорно составлено, но работает.
#4 
OelheizungBerlin посетитель08.04.11 21:27
NEW 08.04.11 21:27 
в ответ паскуда 06.04.11 17:51

#!/usr/bin/perl
my $dname= 'X.txt';my $dnam='';my $data='';my $i=1;my $j=1;open(MM,"<$dname");
while(<MM>){if ($i==1) {$dnam="X$j.txt";open(NN,">$dnam");}$data=$_;
if (length($data)<22){$i=1;$j++;close(NN)}else{print NN "$data";$i++;}}close(MM);
#5