Task

Try:

#!/usr/bin/perl
open I, "$ARGV[0]";
@x=<I>;
chomp($d=`date +%Y%m%d`);
$i=0;
for (@x){
  s/ +$//;
  $t=$_;
  @s=split / +/;
  if ($#s==10){
    $i=1;
    s/([^ ]+ +EUR)1([SB]\d+ +)[^ ]+( +)1/$1$2     ${3}0/;
    /([^ ]+ +){5}(\d+)/;
    $h=int($2/3600000000);
    $m=int(60*($2/3600000000-$h));
    $sek=int(60*(60*($2/3600000000-$h)-$m));
    $time=sprintf "%02d:%02d:%02d",$h,$m,$sek;
    $date=$d . "-" . $time;
    s/(([^ ]+ +){5})\d+/$1$date/;
    $t=~s/(([^ ]+ +){6})\d+/$1$date/;
    $s.=$_;
    $q.=$t;
  } elsif ($i) {
    $i=0;
    $s.=$q;
    $s.=$t;
  } else {
    $s.=$t;
  }
}
$s.=$q if $i;
print $s;
1 Like

Hi bartu11,

Sorry, but I have given another update on the task.
I was told this should be last change. Thanks thousand times.

this is the new INPUT: as oyu can see there was added one more column(last in red) , so we search for rows with 12 columns + time format in green in case of rows needed to be duplicited is slightly different

H:                            EURS100                                    00440000000050.00000000000000010100000075 FR0000045072                            2ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #A
H:                            EURB100                                    00440000000050.00000000000000010100000096 FR0000045072                            1ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #R
H:                            EUR1B101                B101               10440000000420.00000000000000099100000098 FR0000120628                            1CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EUR1S101                S101               10440000000420.00000000000000099100000099 FR0000120628                            2CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544

this is desired OUTPUT, as you can see time format in green is slightly different then rest, so it will have to be converted + time of the duplicated rows should be calculated from the last column in red(milicesonds since midnight).

H:                            EURS100                                    00440000000050.00000000000000010100000075 FR0000045072                            2ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #A
H:                            EURB100                                    00440000000050.00000000000000010100000096 FR0000045072                            1ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #R
H:                            EURB101                                    00440000000420.00000000000000099100000098 FR0000120628                            1CSp                 20110608-09:36:13TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EURS101                                    00440000000420.00000000000000099100000099 FR0000120628                            2CSp                 20110608-09:36:13TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544
H:                            EUR1B101                B101               10440000000420.00000000000000099100000098 FR0000120628                            1CSp                 20110608-10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EUR1S101                S101               10440000000420.00000000000000099100000099 FR0000120628                            2CSp                 20110608-10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544

No need to apologize :wink: Try:

#!/usr/bin/perl
open I, "$ARGV[0]";
@x=<I>;
$i=0;
for (@x){
  s/ +$//;
  $t=$_;
  @s=split / +/;
  if ($#s==11){
    $i=1;
    s/([^ ]+ +EUR)1([SB]\d+ +)[^ ]+( +)1/$1$2     ${3}0/;
    /([^ ]+ +){5}(\d+)-(\d+)-(\d+) (\d+:\d+:\d+)/;
    $d="$2$3$4";
    $date2="$d-$5";
    /(\d+)$/;
    $h=int($1/3600000000);
    $m=int(60*($1/3600000000-$h));
    $sek=int(60*(60*($1/3600000000-$h)-$m));
    $time=sprintf "%02d:%02d:%02d",$h,$m,$sek;
    $date1=$d . "-" . $time;
    s/(([^ ]+ +){5})\d+-\d+-\d+ \d+:\d+:\d+/$1$date1/;
    $t=~s/(([^ ]+ +){6})\d+-\d+-\d+ \d+:\d+:\d+/$1$date2/;
    $s.=$_;
    $q.=$t;
  } elsif ($i) {
    $i=0;
    $s.=$q;
    $s.=$t;
  } else {
    $s.=$t;
  }
}
$s.=$q if $i;
print $s;
1 Like

Hi , output was different

then I found out that I mislead you because now we have 13 columns
as you can see highighted there is one additional space between date and time in the INPUT:

H:                            EURS100                                    00440000000050.00000000000000010100000075 FR0000045072                            2ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #A
H:                            EURB100                                    00440000000050.00000000000000010100000096 FR0000045072                            1ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #R
H:                            EUR1B101                B101               10440000000420.00000000000000099100000098 FR0000120628                            1CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EUR1S101                S101               10440000000420.00000000000000099100000099 FR0000120628                            2CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544

Try this then:

#!/usr/bin/perl
open I, "$ARGV[0]";
@x=<I>;
$i=0;
for (@x){
  s/ +$//;
  $t=$_;
  @s=split / +/;
  if ($#s==12){
    $i=1;
    s/([^ ]+ +EUR)1([SB]\d+ +)[^ ]+( +)1/$1$2     ${3}0/;
    /([^ ]+ +){5}(\d+)-(\d+)-(\d+) (\d+:\d+:\d+)/;
    $d="$2$3$4";
    $date2="$d-$5";
    /(\d+)$/;
    $h=int($1/3600000000);
    $m=int(60*($1/3600000000-$h));
    $sek=int(60*(60*($1/3600000000-$h)-$m));
    $time=sprintf "%02d:%02d:%02d",$h,$m,$sek;
    $date1=$d . "-" . $time;
    s/(([^ ]+ +){5})\d+-\d+-\d+ \d+:\d+:\d+/$1$date1/;
    $t=~s/(([^ ]+ +){6})\d+-\d+-\d+ \d+:\d+:\d+/$1$date2/;
    $s.=$_;
    $q.=$t;
  } elsif ($i) {
    $i=0;
    $s.=$q;
    $s.=$t;
  } else {
    $s.=$t;
  }
}
$s.=$q if $i;
print $s;
1 Like

Thanks, works perfectly.

I wast just given the last change. This is definitely the last change that they request.They have sweared that this is the LAST change.
We need to delete 1 hour from the time highighted in red.
it was "10:41:26" but we need "09:41:26"

Million thanks

H:                            EURS100                                    00440000000050.00000000000000010100000075 FR0000045072                            2ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #A
H:                            EURB100                                    00440000000050.00000000000000010100000096 FR0000045072                            1ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #R
H:                            EUR1B101                B101               10440000000420.00000000000000099100000098 FR0000120628                            1CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EUR1S101                S101               10440000000420.00000000000000099100000099 FR0000120628                            2CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544

this is desired OUTPUT, as you can see time format in green is slightly different then rest, so it will have to be converted + time of the duplicated rows should be calculated from the last column in red(milicesonds since midnight).

H:                            EURS100                                    00440000000050.00000000000000010100000075 FR0000045072                            2ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #A
H:                            EURB100                                    00440000000050.00000000000000010100000096 FR0000045072                            1ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #R
H:                            EURB101                                    00440000000420.00000000000000099100000098 FR0000120628                            1CSp                 20110608-09:36:13TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EURS101                                    00440000000420.00000000000000099100000099 FR0000120628                            2CSp                 20110608-09:36:13TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544
H:                            EUR1B101                B101               10440000000420.00000000000000099100000098 FR0000120628                            1CSp                 20110608-09:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EUR1S101                S101               10440000000420.00000000000000099100000099 FR0000120628                            2CSp                 20110608-09:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544

Try this one:

#!/usr/bin/perl
open I, "$ARGV[0]";
@x=<I>;
$i=0;
for (@x){
  s/ +$//;
  $t=$_;
  @s=split / +/;
  if ($#s==12){
    $i=1;
    s/([^ ]+ +EUR)1([SB]\d+ +)[^ ]+( +)1/$1$2     ${3}0/;
    /([^ ]+ +){5}(\d+)-(\d+)-(\d+) (\d+)(:\d+:\d+)/;
    $d="$2$3$4";
    $h2=sprintf "%02d", ($5-1);
    $date2="$d-$h2$6";
    /(\d+)$/;
    $h=int($1/3600000000);
    $m=int(60*($1/3600000000-$h));
    $sek=int(60*(60*($1/3600000000-$h)-$m));
    $time=sprintf "%02d:%02d:%02d",$h,$m,$sek;
    $date1=$d . "-" . $time;
    s/(([^ ]+ +){5})\d+-\d+-\d+ \d+:\d+:\d+/$1$date1/;
    $t=~s/(([^ ]+ +){6})\d+-\d+-\d+ \d+:\d+:\d+/$1$date2/;
    $s.=$_;
    $q.=$t;
  } elsif ($i) {
    $i=0;
    $s.=$q;
    $s.=$t;
  } else {
    $s.=$t;
  }
}
$s.=$q if $i;
print $s;
2 Likes

thanks

I accidentaly removed one change from my previous post and realized just now. (Time decreasing worked fine.)
highlighted in blue font is the change that I removed accidentally.
Also two lines are swapped(S101 first, B101 second - but this is not so critical)
I'm really really SORRY, I don't do this on purpose. Please check

H:                            EURS100                                    00440000000050.00000000000000010100000075 FR0000045072                            2ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #A
H:                            EURB100                                    00440000000050.00000000000000010100000096 FR0000045072                            1ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #R
H:                            EUR1B101                B101               10440000000420.00000000000000099100000098 FR0000120628                            1CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EUR1S101                S101               10440000000420.00000000000000099100000099 FR0000120628                            2CSp                 2011-06-08 10:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544

H:                            EURS100                                    00440000000050.00000000000000010100000075 FR0000045072                            2ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #A
H:                            EURB100                                    00440000000050.00000000000000010100000096 FR0000045072                            1ACAp                20110608-08:06:13BNABFRPP            PA BNABFRPP            PARBFRPP                                                  #R
H:                            EURB101                                    00440000000420.00000000000000099100000098 FR0000120628                            1CSp                 20110608-09:36:13TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544
H:                            EURS101                                    00440000000420.00000000000000099100000099 FR0000120628                            2CSp                 20110608-09:36:13TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544
H:                            EUR1S101                S101               10440000000000.00099000042000000100000099 FR0000120628                            2CSp                 20110608-09:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #R 34633539544
H:                            EUR1B101                B101               10440000000000.00099000042000000100000098 FR0000120628                            1CSp                 20110608-09:41:26TRADETESTBIC5       PA TRADETESTBIC5       TESTCLRXX                                                 #A 34633539544


I implemented line swapping as well, check if it is working properly:

#!/usr/bin/perl
open I, "$ARGV[0]";
@x=<I>;
$i=0;
for (@x){
  s/ +$//;
  $t=$_;
  @s=split / +/;
  if ($#s==12){
    $i=1;
    s/([^ ]+ +EUR)1([SB]\d+ +)[^ ]+( +)1/$1$2     ${3}0/;
    /([^ ]+ +){5}(\d+)-(\d+)-(\d+) (\d+)(:\d+:\d+)/;
    $d="$2$3$4";
    $h2=sprintf "%02d", ($5-1);
    $date2="$d-$h2$6";
    /(\d+)$/;
    $h=int($1/3600000000);
    $m=int(60*($1/3600000000-$h));
    $sek=int(60*(60*($1/3600000000-$h)-$m));
    $time=sprintf "%02d:%02d:%02d",$h,$m,$sek;
    $date1=$d . "-" . $time;
    s/(([^ ]+ +){5})\d+-\d+-\d+ \d+:\d+:\d+/$1$date1/;
    $t=~s/(([^ ]+ +){6})\d+-\d+-\d+ \d+:\d+:\d+/$1$date2/;
    $t=~s/(([^ ]+ +){3}\d{11})(\d{3})\.\d{15}(\d{2})/${1}000.000${4}0000${3}00000/;
    $s.=$_;
    $q="$t$q";
  } elsif ($i) {
    $i=0;
    $s.=$q;
    $q="";
    $s.=$t;
  } else {
    $s.=$t;
  }
}
$s.=$q if $i;
print $s;
1 Like

GREAT, it's working perfectly.
You are the best.
Thank you again for all your effort