libdb/util/db_printlog/dbname.awk

83 lines
1.4 KiB
Awk

# $Id$
#
# Take a comma-separated list of database names and spit out all the
# log records that affect those databases.
# Note: this will not start printing records until a dbreg_register
# record for that file is found.
NR == 1 {
nfiles = 0
while ((ndx = index(DBNAME, ",")) != 0) {
filenames[nfiles] = substr(DBNAME, 1, ndx - 1) "\\0";
DBNAME = substr(DBNAME, ndx + 1, length(DBNAME) - ndx);
files[nfiles] = -1
nfiles++
}
filenames[nfiles] = DBNAME "\\0";
files[nfiles] = -1
myfile = -1;
nreg = 0;
}
/^\[.*dbreg_register/ {
register = 1;
}
/opcode:/ {
if (register == 1) {
if ($2 == "CHKPNT" || $2 == "OPEN" || $2 == "PREOPEN" || $2 == "REOPEN")
register = 3;
}
}
/name:/ {
if (register >= 2) {
myfile = -2;
for (i = 0; i <= nfiles; i++) {
if ($5 == filenames[i]) {
if (register == 2) {
printme = 0;
myfile = -2;
} else {
myfile = i;
}
break;
}
}
}
register = 0;
}
/fileid:/{
if (myfile == -2)
files[$2] = 0;
else if (myfile != -1) {
files[$2] = 1;
if ($2 > nreg)
nreg = $2;
printme = 1;
register = 0;
myfile = -1;
} else if ($2 <= nreg && files[$2] == 1) {
printme = 1
}
myfile = -1;
}
/^\[/{
if (printme == 1) {
printf("%s\n", rec);
printme = 0
}
rec = "";
rec = $0
}
TXN == 1 && /txn_regop/ {printme = 1}
/^ /{
if (length(rec) + length($0) < 2040)
rec = sprintf("%s\n%s", rec, $0);
}
END {
if (printme == 1)
printf("%s\n", rec);
}