Hallå där,
Jag har ett par filer jag behöver gå samman. Jag kan göra en enkel sammanfogning av sammanfoga dem till en större fil.
Men jag behöver filtrera filen för att få ett önskat resultat.
Produktionen ser ut så här:
Kod:
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
och filtrering bör lämna den första och den sista raden med TRNH och TRLR (ge den sista TRLR samma sekvens som den första TRNH). Resten av TRNH och TRLR rader måste utelämnas.
Det slutliga TRLR ska representera mängden ORDH linjer och mängden OADR, OMSG och ORDL linjer.
Jag har inte fått till att ta bort extra TRNH och linjer TRLR ändå, det är filtret Jag har hittills:
Kod:
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;
}
Nu mängden ORDH rader matas till min nya filen, så verkar fungera. Ändå mängden OADR, OMSG och ORDL linjer inte rättas till i produktionen.
Slutresultatet bör se ut så här:
Kod:
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
Någon hjälp skulle vara mycket uppskattat
