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