in reply to Re^2: Cutting text from the end of the file and adding it to the top
in thread Cutting text from the end of the file and adding it to the top

So, you are saying that the numbers in the input are essentially irrelevant. SSCCE:

#!/usr/bin/env perl use strict; use warnings; my @lines = <DATA>; print shift @lines; chomp @lines; my $perline = 8; my @num; my @numline = (1 .. $perline); my $fmt = '%s ' . '%5i' x $perline . "\n"; for my $line (@lines) { if ($line =~ /^1/) { print join (' ', @num) . "\n"; last; } printf $fmt, $line, @numline; push @num, @numline; $_ += $perline for @numline; } __DATA__ a b c d e f g h aa bb cc dd aa bb cc dd aa bb cc dd 1 2 3 4 5 6 7 8 9 10 11 12 13 1 +4 15 16
  • Comment on Re^3: Cutting text from the end of the file and adding it to the top
  • Download Code

Replies are listed 'Best First'.
Re^4: Cutting text from the end of the file and adding it to the top
by oysterperl (Novice) on Sep 30, 2019 at 10:34 UTC
    Thanks, no I just gave an example of serial numbers, but the numbers can be any random numbers and the numbers are relevant. example: Input:
    a, b, c, d, aa, bb, aa, bb, 12,33,102,111,223,24,88,56,99,130,21,45,88,90,212,500
    Desired output:
    a, b, c, d, aa, 12, 33, 102, 111, bb, 223, 24, 88, 56, aa, 99, 130, 21, 45, bb, 88, 90, 212, 500,

      What is the format of your text file ?

      In your original post it was whitespace delimiter with all data on the last line. On this post your data is over the last 2 lines (which is why Athanasius's script does not work for you) and on your latest post the data is comma delimited.

      poj
      $ cat tmp/tmp.pl && perl tmp/tmp.pl #!/usr/bin/perl # use strict; use warnings; my $heading=readline(DATA); my @headings=split/,/,$heading; print $heading; my (@index,@values); while(<DATA>){ chomp; if (/^(\w+),\s*$/){ push @index,$1; } else{ @values=split/,/,$_; } } my $row = 0; for my $record (@index){ print join(",\t", $record, @values[(scalar(@headings) * $row) .. ( +(scalar(@headings) * $row) + $#headings -1)]),"\n"; $row++; } __DATA__ a, b, c, d aa, bb, aa, bb, 12,33,102,111,223,24,88,56,99,130,21,45,88,90,212,500 a, b, c, d aa, 12, 33, 102 bb, 223, 24, 88 aa, 99, 130, 21 bb, 88, 90, 212
      I trimmed the trailing "," in your headings line as that breaks the CSV standard, but your format seems variable so...
      print "Good ",qw(night morning afternoon evening)[(localtime)[2]/6]," fellow monks."
        Hi, Sorry for the confusion, the file is a CSV file and every entry has a comma after it as a delimiter. (the format was not finalized but now it is CSV). So the output should be the following, spaces are not needed in the output file, it only needs to be comma separated. Also I have added the numbers 999, 9999 to the input so as to make each row in the output complete.
        a, b, c, d, aa, 12, 33, 102, bb, 111, 223, 24, aa, 88, 56, 99, bb, 130, 21, 45, aa, 88, 90, 212, bb, 500, 999, 9999
        Also I need to print it back to the same file. Do I add the file pointer after the print statement below to print it back to the same file?
        for my $record (@index){ print DATA join(",\t", $record, @values[(scalar(@headings) * $row) + .. ( +(scalar(@headings) * $row) + $#headings -1)]),"\n"; $row++;