![]() |
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| Append-tête et Trailer | balzzz | UNIX pour les nuls Questions et réponses | 2 | 01-06-2008 08:19 AM |
| Vérification de l'en-tête et de la remorque pour une chaîne de caractères et s'il n'est pas trouvé, sortir de la | er_ashu | UNIX pour les nuls Questions et réponses | 2 | 11-08-2007 09:55 AM |
| Copiez tous les fichiers avec l'horodatage et de supprimer tête, une remorque, à partir du fichier | ksrams | UNIX pour les nuls Questions et réponses | 35 | 07-30-2007 02:15 PM |
| Comte n ° de documents au dossier, sans compter tête et Trailer Records | guiguy | De programmation et de script Shell | 2 | 06-07-2007 12:15 PM |
| la combinaison de deux fichiers texte d'entrée | d3ck_tm | AIX | 6 | 02-28-2006 11:23 PM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
Fusionner des fichiers texte tout en combinant les multiples header / trailer dossiers en un seul chacun.
Situation:
Notre système exécute actuellement un emploi (COBOL Program) qui génère un fichier d'interface doivent être envoyés à l'un de nos fournisseurs. Parce que ce système traite les informations pour plus de 100.000 employés et les retraités (et plus), nous aimerions le multi-thread d'emplois dans la transformation des groupes afin de réduire son temps d'exécution. Cela marche bien, cependant, nous sommes confrontés à de multiples fichiers d'interface, qui doivent être fusionnées avant le transfert au vendeur. Quelques détails sur le dossier: Le fichier généré a une tête et un enregistrement, et l'enregistrement de la valeur totale est pertinent (c'est-à-dire, d'employés, les dossiers approuvés, etc.) Il n'y a pas de séparateurs de champ - ce sont des champs de longueur fixe. Predicament en détail: Nous aimerions que de concaténer des fichiers - c'est la partie facile. Qu'est-ce qui rend difficile, c'est ce que nous avons besoin d'éliminer les multiples dossiers de tête et de ne conserver que la première. Aussi, nous avons besoin pour éliminer les enregistrements multiples remorque, mais nous avons besoin d'ajouter de la valeur de tous les totaux de chaque remorque dans un enregistrement de nous maintenir à la fin. Comme vous avez peut-être penser maintenant, j'ai écrit quelques scripts UNIX, mais il leur manque certains éléments clés des connaissances relatives aux individuelle et des manipulations dans un fichier texte. En particulier, je voudrais savoir comment je peux définir des domaines spécifiques, quand je lis chaque dossier - ce sont les domaines pour la remorque des dossiers dont j'ai besoin pour conserver un total de roulement sur. Aussi, je voudrais savoir comment je peux effacer des dossiers. Toute aide sera grandement appréciée. |
|
||||
|
Exemple de dossier
Citation:
LOT 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 ED 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 LOT DE TRAILER 000001150000019908042008 Détails sur le Trailer Record: le 00000115 est une valeur totale (nombre de salariés), le 00000199 est le nombre total de dossiers traités (salariés et personnes à charge). Ces deux domaines que je besoin de garder un total de roulement pour l'ensemble des dossiers que nous avons fusionner. Le détail des dossiers de plus de 300 caractères de large (sans pertinence pour ce que nous devons faire, mais je pensais que je l'inclure). Merci! |
|
||||
|
en supposant que cela: 01E000036841 id est un employé et les fichiers sont nommés <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
|
|
||||
|
salut ci-dessous perl mai de vous aider un peu
usage: perl a.pl NUM fichier1 fichier2 [NUM indiquer ici le nombre de lignes sera header] Code:
a: ***** line 1 line 2 1 2 3 4 5 Code:
b: ***** line 3 line 4 9 8 7 6 5 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;
|
![]() |
| Bookmarks |
| Tags |
| perl, perl changement, déplacement, changement perl |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|