The UNIX and Linux Forums  

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



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
Fusion de lignes en utilisant AWK senthil_is De programmation et de script Shell 6 03-05-2008 12:40 PM
Fusion de lignes - Réglage du script senthil_is De programmation et de script Shell 3 03-05-2008 03:24 AM
la fusion de deux lignes dans un fichier thaduka UNIX pour les nuls Questions et réponses 6 07-11-2007 10:27 AM
La fusion des lignes dans un Foxgard UNIX pour les nuls Questions et réponses 8 06-19-2005 07:36 AM
Compter les lignes et les fichiers jorge.ferreira UNIX pour les nuls Questions et réponses 6 12-11-2003 11:24 AM

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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 01-28-2008
Meert's Avatar
Meert Meert is offline
Registered User
  
 

Join Date: Sep 2007
Messages: 8
Fusion des fichiers avec AWK de filtrage et de comptage de lignes

Salut,

J'ai un couple de fichiers J'ai besoin de fusionner. Je peux le faire par une simple concaténation de les fusionner en un seul fichier plus volumineux.

Mais j'ai besoin de filtrer le dossier pour obtenir un résultat souhaité.

La sortie ressemble à ceci:
Code:
TRNH 0000000010941
ORDH
OADR
OADR
ORDL
ENDT    1116399         000000003 000000001
TRLR 0000000010941 000000003 000000001
TRNH 0000000010942
ORDH
OADR
OADR
ORDL
ENDT    1116400         000000003 000000001
TRLR 0000000010942 000000003 000000001
TRNH 0000000010943
ORDH
OADR
OMSG
ORDL
ORDL
ENDT    1116399         000000004 000000001
TRLR 0000000010943 000000003 000000001
TRNH 0000000010944
ORDH
OADR
OADR
ORDL
ENDT    1116400         000000003 000000001
ORDH                                       
OADR                                       
OADR
ORDL                                       
ORDL                                       
ENDT    1116400         000000004 000000001
TRLR 0000000010944 000000007 000000002
et le filtrage de quitter la première et la dernière ligne avec la TRNH et TRLR (en donnant le dernier TRLR la même séquence que la première TRNH). Le reste de la TRNH et TRLR lignes doivent être omis.

Ensuite, le final TRLR doit représenter le montant de ORDH lignes et le montant de OADR, oMsg et ORDL lignes.

Je n'ai pas eu à la suppression du supplément TRNH et lignes TRLR encore, ce qui est du filtre, j'ai à ce jour:

Code:
BEGIN {
#	 define two counters 
	ordh_cnt = 0;
	ordl_total_cnt = 0;
}

#  Start filter 

#  if line start with ORDH add 1 to counters 
$1 == "ORDH" {
	ordh_cnt++;
}

#  if line starts with TRLR, adjust line to reflect new count of ORDH in order
$1 == "TRLR" {
	printf "%s%9.9d%s\n", substr($0, 0, 31), ordh_cnt, substr($0, 39);
#	 line has been printed, next rule 
	next;
}

#  if line start with ORDL add 1 to counters 
$1 == "ORDL" {
	ordl_total_cnt++;
}

#  if line start with OADR add 1 to counters 
$1 == "OADR" {
	ordl_total_cnt++;
}

#  if line start with OMSG add 1 to counters 
$1 == "OMSG" {
	ordl_total_cnt++;
}

#  if line starts with TRLR, adjust line to reflect new total ORDL, OADR and OMSG in complete file 
$1 == "TRLR" {
	printf "%s%9.9d%s\n", substr($0, 0, 19), ordl_total_cnt, substr($0, 29);
#	 line has been printed, next rule 
	next;
}

#  Line has not changed, print normal line 
{
	print $0;
}
Maintenant, le montant de ORDH lignes de production à mon nouveau fichier, ce qui semble fonctionner. Pourtant, le montant de OADR, oMsg ORDL lignes et n'est pas corrigé à la sortie.

Le résultat final devrait ressembler à ceci:

Code:
TRNH 0000000010941
ORDH
OADR
OADR
ORDL
ENDT    1116399         000000003 000000001
ORDH
OADR
OADR
ORDL
ENDT    1116400         000000003 000000001
ORDH
OADR
OMSG
ORDL
ORDL
ENDT    1116399         000000004 000000001
ORDH
OADR
OADR
ORDL
ENDT    1116400         000000003 000000001
ORDH                                       
OADR                                       
OADR
ORDL                                       
ORDL                                       
ENDT    1116400         000000004 000000001
TRLR 0000000010941 000000017 000000005
Toute aide serait grandement appréciée
  #2 (permalink)  
Old 01-28-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
addict
  
 

Join Date: Jan 2007
Lieu: Варна, България / Milano, Italia
Posts: 2892
Code:
awk 'NR == 1 { trnh = $2; print }
!/^TR(NH|LR)/ { 
  if ($1 == "ORDH") 
    ordh ++ 
  if ($1 ~ /^O(ADR|MSG|RDL)/) 
    ordl ++
  print 
} END {
printf "TRLR %s %.9d %.9d\n", trnh, ordl, ordh
}' filename
  #3 (permalink)  
Old 01-28-2008
Meert's Avatar
Meert Meert is offline
Registered User
  
 

Join Date: Sep 2007
Messages: 8
Merci beaucoup, fonctionne comme un charme!
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 02:28 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0