The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Append Sidehoved og Trailer balzzz UNIX for dummyer Spørgsmål & svar 2 01-06-2008 08:19 AM
Kontrol af header og trailer for en given snor, og hvis ikke fundet, exit ud af er_ashu UNIX for dummyer Spørgsmål & svar 2 11-08-2007 09:55 AM
Kopier alle filerne med tiden stempel og fjerne overskriften, trailer fra fil ksrams UNIX for dummyer Spørgsmål & svar 35 07-30-2007 03:15 PM
Count nr. Records i File uden optælling Sidehoved og Trailer Records guiguy Shell Programmering og Scripting 2 06-07-2007 01:15 PM
at kombinere to input tekstfiler d3ck_tm AIX 6 02-28-2006 11:23 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 11-17-2008
oordonez oordonez is offline
Registreret Bruger
  
 

Join Date: Nov 2008
Stillinger: 2
Merge tekstfiler mens kombinere flere header / trailer records i en hver.

Situation:
Vores system i øjeblikket udfører et job (COBOL Program), der genererer en grænseflade fil, der skal sendes til en af vores leverandører. Fordi dette system behandler oplysningerne i over 100.000 ansatte / pensionister (og voksende), vil vi gerne multi-tråd jobbet i behandlingen-grupper med henblik på at reducere sine løbe-tid. Dette virker fint, men vi er konfronteret med flere interface filer, der skal slås sammen, før overførsel til sælgeren.


Nogle Oplysninger om den sag:
Den genererede fil har en header og en trailer rekord, og traileren rekord er relevante samlede værdier (dvs. ansatte tælle, optegnelser godkendt, etc). Der er ingen feltseparatorer - disse er fast længde felter.

Knibe i detaljer:
Vi vil gerne til at sammenkæde de filer - det er den nemme del. Hvad gør det svært er, at vi er nødt til at fjerne de mange header optegnelser og bevarer kun den første. Også, vi har brug for at fjerne de mange traileren optegnelser, men vi er nødt til at tilføje alle de værdi totaler fra hver trailer ind i en trailer registrerer vi bevarer i slutningen.

Som du måske har anet, som nu, har jeg skrevet nogle UNIX-scripts, men mangler nogle vigtige viden i tilknytning til de enkelte registrere og på manipulation i en tekstfil. I særdeleshed vil jeg gerne vide, hvordan jeg kan definere specifikke felter, når jeg læser hver post - det er disse felter til traileren optegnelser jeg nødt til at holde et rullende alt om. Også, vil jeg gerne vide, hvordan jeg kan slette enkelte poster.

Enhver hjælp vil blive meget værdsat.
  #2 (permalink)  
Old 11-17-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.790
Du gav ikke nok oplysninger til at opbygge en korrekt script
Vi har brug for en prøve hovedlinje en prøve data linje og en prøve trailer linje.
  #3 (permalink)  
Old 11-17-2008
oordonez oordonez is offline
Registreret Bruger
  
 

Join Date: Nov 2008
Stillinger: 2
Prøvefilen

Citat:
Oprindeligt Indsendt af jim McNamara View Post
Du gav ikke nok oplysninger til at opbygge en korrekt script
Vi har brug for en prøve hovedlinje en prøve data linje og en prøve trailer linje.
Sorry about that! Her er et eksempel fil - ufuldstændige optegnelser, men, da de er temmelig store. Men de relevante oplysninger er indeholdt.


BATCH CER PRO 0724200808042008
01E000036841 LEAD05151948F 51498 10012007 YYY
02E000036841 ME 04161988F 10.012.007
01E000060640 MDGV12251951F 51.498 1001200709302008YYY
02E000060640 RD 05061941M 1001200709302008
01E000025850 LDUO06081956F 51.498 1001200709302008YYY
02E000025850 ED 10071937M 1001200709302008
01E029009859 DUA05021960F 51498 10012007 YYY
02E029009859 LD 03101989F 10.012.007
02E029009859 LD 02041997M 10.012.007
01E034008379 AEUA09181965F 51498 10012007 YYY
02E034008379 NE 11131991F 10.012.007
02E034008379 RE 01131993F 10.012.007
02E034008379 EE 09191959M 10.012.007
01E045005523 EUA02131964M 51498 10012007 ÝÑñ
01E046004280 DUA12041947M 51498 10012007 YYY
02E046004280 D 12121953F 10.012.007
02E046004280 KE 09211986M 10.012.007
01E048005119 BDUA01301961F 51498 10012007 ÝÑñ
01E055002147 LDUA10011964F 51498 10012007 YYY
02E055002147 RD 11121966M 10.012.007
02E055002147 ND 02131997F 10.012.007
02E055002147 JD 03111992M 10.012.007
01E057008796 SEUA12061975F 51498 10012007 YYY
BATCH TRAILER 000001150000019908042008

Nærmere oplysninger om de Trailer Record: Det 00000115 er en samlet værdi (antal ansatte), at 00.000.199 er summen af registre behandles (ansatte og pårørende). Disse to områder, som jeg havde behov for at holde en rullende samlet for alle de filer, vi fusionere.

De detaljerede optegnelser er over 300 tegn lang (uden betydning for, hvad vi skal gøre, men tænkte jeg tage det).

Tak!
  #4 (permalink)  
Old 11-17-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.790
påtage sig denne: 01E000036841 er en medarbejder-id og filer navngives <something>. dat

Code:
ls *.dat | read header dummy
# save copies of header
head -1 $header > tmp

awk '{ if (index($0, "HEADER") > 0 || index($0, "TRAILER") >0 ) {last= $0; continue}
       arr[$0]++; print $0   }
       END { for (i in arr) 
             {
               empcnt++ 
               lc+=arr[i]
             } 
             print empcnt, lc > "cntfile" }  ' *.dat >> tmp
awk ' { rec=sprintf("%08d%08d", $1 $2)}
         END { printf("BATCH TRAILER %s%s\n", rec, substr(last, length(last)-7) } ' cntfile >> tmp
mv tmp employee.dat

Dette forudsætter også de sidste otte tegn i BATCHNUMMER TRAILER er alle samme.
  #5 (permalink)  
Old 11-17-2008
summer_cherry summer_cherry is offline Forum Advisor  
Registreret Bruger
  
 

Join Date: Jun 2007
Location: Beijing Kina
Posts: 1.089
hi nedenfor perl kan hjælpe dig lidt

Usage: perl a.pl NUM fil1 fil2 [her NUM angive, hvor mange linjer vil blive header]

Code:
a:
*****
line 1
line 2
1 2 3 4 5


Code:
b:
*****
line 3
line 4
9 8 7 6 5

output:

Code:
*****
line 1
line 2
line 3
line 4
10 10 10 10 10


Code:
$header=shift;
undef $/;
my(@head,@body,@foot);
while($file=shift){
	open FH,"<$file" or die "Can not open file $_";
	my $str=<FH>;
	close FH;
	my @temp=split("\n",$str);		
	for( my $i=0;$i<$header;$i++){
		push @head,$temp[$i] if ($#head<$header-1);
	}
	for(my $j=$header;$j<$#temp;$j++){
		push @body,$temp[$j];
	}
	my @footer = split(" ",$temp[$#temp]);
	for($k=0;$k<=$#footer;$k++){
		$foot[$k]=$foot[$k]+$footer[$k];
	}
}
print join "\n",@head;
print "\n",join "\n",@body;
print "\n",join " ",@foot;

Closed Thread

Bogmærker

Tags
perl, perl skift, skift, skift perl

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 01:37 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0