![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui. |
Più di UNIX e Linux Forum Argomenti potreste trovare utili
|
||||
| Filo | Thread Starter | Forum | Risposte | Ultimo Post |
| Appende Header e Trailer | balzzz | UNIX for Dummies Domande & Risposte | 2 | 01-06-2008 08:19 AM |
| Verifica l'intestazione e il rimorchio di una determinata stringa, e se non trovate, uscita fuori dalla | er_ashu | UNIX for Dummies Domande & Risposte | 2 | 11-08-2007 09:55 AM |
| Copia tutti i file con il tempo di bollo e rimuovere intestazione, rimorchio da file | ksrams | UNIX for Dummies Domande & Risposte | 35 | 07-30-2007 03:15 PM |
| Conte n. di record nel file di intestazione e senza contare Trailer Records | guiguy | Shell scripting e di programmazione | 2 | 06-07-2007 01:15 PM |
| combinazione di due file di testo di input | d3ck_tm | AIX | 6 | 02-28-2006 11:23 PM |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
Unione di file di testo, mentre combinando le molteplici intestazione / rimorchio record in uno ciascuno.
Situazione:
Il nostro sistema attualmente esegue un lavoro (COBOL Program) che genera un file di interfaccia per essere inviati a uno dei nostri fornitori. Poiché questo sistema elabora le informazioni per oltre 100.000 lavoratori / pensionati (e crescente), vorremmo multi-thread di lavoro in gruppi di trattamento al fine di ridurre il suo run-time. Questo funziona bene, però, siamo di fronte a molteplici interfaccia file che devono essere fuse prima di trasferire il venditore. Alcuni dettagli sui file: Il file generato è un header e un rimorchio di registrazione, e il rimorchio ha registrare valori pertinenti totale (vale a dire, dipendente contare, approvato registri, ecc.) Non ci sono separatori di campo - si tratta di campi a lunghezza fissa. Situazione nel dettaglio: Saremmo lieti di concatenare i file - che è la parte facile. Ciò che rende questo difficile è che abbiamo bisogno di eliminare il record di più di testa e di mantenere solo il primo. Inoltre, abbiamo bisogno di eliminare il più rimorchio record, ma abbiamo bisogno di aggiungere il valore di tutti i totali di ogni rimorchio in un rimorchio di registrazione ti mantenere alla fine. Come potrebbe essere ipotizzato da adesso, che ho scritto alcuni script UNIX, ma mancano alcune conoscenze relative alla registrazione individuale e la manipolazione del settore all'interno di un file di testo. In particolare, vorrei sapere come posso definire settori specifici, quando ho letto ogni record - sono questi i campi per il rimorchio record ho bisogno di tenere a rotazione sul totale. Inoltre, vorrei sapere come posso eliminare i singoli record. Qualsiasi aiuto sarà molto apprezzato. |
|
||||
|
Esempio di file
Citazione:
LOTTO HEADER PRO 0724200808042008 01E000036841 LEAD05151948F 51498 10012007 YYY 02E000036841 ME 04161988F 10012007 01E000060640 MDGV12251951F 51498 1001200709302008YYY 02E000060640 RD 05061941M 1001200709302008 01E000025850 LDUO06081956F 51498 1001200709302008YYY 02E000025850 DE 10071937M 1001200709302008 01E029009859 DUA05021960F 51498 10012007 YYY 02E029009859 LD 03101989F 10012007 02E029009859 LD 02041997M 10012007 01E034008379 AEUA09181965F 51498 10012007 YYY 02E034008379 NE 11131991F 10012007 02E034008379 RE 01131993F 10012007 02E034008379 EE 09191959M 10012007 01E045005523 EUA02131964M 51498 10012007 YNN 01E046004280 DUA12041947M 51498 10012007 YYY 02E046004280 D 12121953F 10012007 02E046004280 KE 09211986M 10012007 01E048005119 BDUA01301961F 51498 10012007 YNN 01E055002147 LDUA10011964F 51498 10012007 YYY 02E055002147 RD 11121966M 10012007 02E055002147 ND 02131997F 10012007 02E055002147 JD 03111992M 10012007 01E057008796 SEUA12061975F 51498 10012007 YYY LOTTO TRAILER 000001150000019908042008 Dettagli sulla Trailer record: il 00000115 è un valore totale (numero di dipendenti), il 00000199 è il totale dei record trattati (dipendenti e familiari a carico). Questi due campi ho bisogno di mantenere una rotazione totale per tutti i file che si fondono. Il dettaglio registri sono oltre 300 caratteri di larghezza (irrilevante per ciò che dobbiamo fare, ma ho pensato che includono). Grazie! |
|
||||
|
assumendo questo: è un lavoratore dipendente 01E000036841 id e il nome file sono <something>. dat
Codice:
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
|
|
||||
|
hi sotto perl si può aiutare un po '
d'uso: perl NUM a.pl file1 file2 [qui NUM indicare quante linee saranno intestazione] Codice:
a: ***** line 1 line 2 1 2 3 4 5 Codice:
b: ***** line 3 line 4 9 8 7 6 5 Codice:
***** line 1 line 2 line 3 line 4 10 10 10 10 10 Codice:
$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;
|
![]() |
| Segnalibri |
| Tag |
| perl, perl turno, spostamento, spostamento perl |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|