The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Glidelåskjøring linjer ved hjelp awk senthil_is Shell programmering og Skripting 6 03-05-2008 12:40
Glidelåskjøring linjer - Tuning skriptet senthil_is Shell programmering og Skripting 3 03-05-2008 03:24
glidelåskjøring to linjer i en fil thaduka UNIX for Dummies Spørsmål og svar 6 07-11-2007 10:27
Glidelåskjøring linjer i en Foxgard UNIX for Dummies Spørsmål og svar 8 06-19-2005 07:36
Counting linjer og filer jorge.ferreira UNIX for Dummies Spørsmål og svar 6 12-11-2003 11:24

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øk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 01-28-2008
Meert's Avatar
Meert Meert is offline
Registrert bruker
  
 

Bli Dato: Sep 2007
Innlegg: 8
Glidelåskjøring filer med awk filtrering og telling linjer

Hei,

Jeg har et par filer som jeg trenger å fusjonere. Jeg kan gjøre en enkel flette ved å lenke sammen dem inn i en større fil.

Men da jeg trenger å filtrere filen for å få et ønsket resultat.

Produksjonsgapet ser slik ut:

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

og filtrering bør forlate den første og siste linje med TRNH og TRLR (gir den siste TRLR samme rekkefølge som den første TRNH). Resten av TRNH og TRLR linjer må utelates.

Da den endelige TRLR skal representere mengden ORDH linjer og mengden OADR, OMSG og ORDL linjer.

Jeg har ikke fått til å slette ekstra TRNH og TRLR linjer ennå, dette er det filteret jeg har så langt:


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;
}

Nå mengden ORDH linjer er utgang til min nye filen, slik at synes å fungere. Likevel mengden OADR, OMSG og ORDL linjene er ikke korrigert i produksjon.

Det endelige resultatet skal se slik ut:


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

Eventuelle hjelpe ville være verdsatt
  #2 (permalink)  
Old 01-28-2008
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
stoffmisbruker
  
 

Bli Date: Jan 2007
Beliggenhet: Варна, България / Milano, Italia
Innlegg: 2915

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
Registrert bruker
  
 

Bli Dato: Sep 2007
Innlegg: 8
Tusen takk, arbeider like en ynde!
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 10:04.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0