|
Egyesülő fájlokat AWK szűrés és számítási tételek
Hi there,
Nekem van egy pár kép Meg kell egyesíteni. Meg tudom csinálni egy egyszerű összeolvad az összefűző őket egy nagyobb fájlt.
De aztán kell szűrni a fájlt kap a kívánt eredmény.
A kimenet így néz ki:
Kód:
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
A szűrés és meg kell hagyni az első és az utolsó sorban a TRNH és TRLR (megadva az utolsó TRLR, ugyanabban a sorrendben, mint az első TRNH). A többi TRNH és TRLR sorokat kell hagyni.
Aztán a végső TRLR kell képviselniük összege ORDH vonalak és annak összegét az OADR, OMSG és ORDL vonalak.
Én még nem jött, hogy törli a felesleges TRNH és TRLR sorok mégis, ez a szűrő van eddig:
Kód:
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;
}
Most az összeget ORDH vonalak kimenetet az új fájlt, úgy, hogy úgy tűnik, hogy működik. Ám összege OADR, OMSG és ORDL vonalak nem pótolja a kimenetet.
A végeredmény így fog kinézni:
Kód:
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
Akármi segít akar lenni nagyon méltányol
|