2012-03-28 4 views
0

Ich muss Text aus der obigen Zeile kopieren, die "DIV (") und den Wert in der Zeile, wo Zwischensumme ist gezeigt. der Wert Ihrer ist im Bericht nicht. Wir müssen, dass in dem Bericht auch mit Werten entlang hinzuzufügen.Müssen kopierten Text aus der obigen Zeile in einer Datei in die folgende Zeile hinzufügen, wo es platziert werden muss

Bitte helfen Sie mir zu diesem Thema. Wie ein Shell-Skript oder mit awk schreiben oder sed.

Bericht Format:

 
03/27/2012 - Emails Counts 

Test1 DIV(12345)     
Storenum Add Change 
----------- ---- ------ 
Store1  1  0      
      ---- ------ 
      1  0 
Test2 DIV(435335)     
Storenum Store Name  Add Change 
----------- --------------- ---- ------ 
Store2  Test Store2  2  1 
Store3  Test Store3  5  1 
Store4  Test Store4  0  1 
          ---- ------ 
           7  3 
          ---- ------          
Grand Total     8  3 

Tobeformated zu

 
03/27/2012 - Emails Counts 

Test1 DIV(12345)     
Storenum     Add Change 
-----------     ---- ------ 
Store1      1  0      
          ---- ------ 
Test1 DIV(12345) Subtotal 1  0 
Test2 DIV(435335)     
Storenum Store Name  Add Change 
----------- --------------- ---- ------ 
Store2  Test Store2  2  1 
Store3  Test Store3  5  1 
Store4  Test Store4  0  1 
          ---- ------ 
Test2 DIV(435335) Subtotal 7  3 
          ---- ------          
Grand Total     8  3 
+2

Was haben Sie versucht? Sie können jemanden einstellen, der das für Sie tut, aber ohne Ihre Hilfe wird niemand Ihnen mit nicht vorhandenen Problemen helfen. – Blender

+0

Wenn Sie diesen Bericht aus einer Datenbank erstellen (hoffe ich), sollten Sie die Zeit investieren, um zu lernen, wie Sie Abfragen schreiben, die die von Ihnen benötigte Ausgabe erzeugen. So etwas zu codieren wird ein Wartungs-Albtraum sein! ;-) !!! Viel Glück. – shellter

Antwort

0
#!/usr/bin/perl -p 
next unless /DIV\(/; 
print; 
s/\s+$//; 
$div = $_." Subtotal"; 
$head = <>; 
$_ = <>; 
$pos = index $_, " ---- "; 
sub insbl { substr $_[0], $pos, 0, " "x(27-$pos); } 
insbl $head; print $head; 
insbl $_; print; 
do { insbl $_ = <>; print; } until /----/; 
$_ = $div.<>; 
substr $_, 27, $pos-27+length($div), ""; 
Verwandte Themen