# This is suitable for removing extraneous lines from "diff -C0" # outout of log files. If some lines are going away and others are # being added, only the additions will be printed. If no new lines # appear, nothing will be printed. If it appears that these are not # diffs of a log file (that is, lines do not begin with a timestamp), # no suppression will be done. # rewritten; daw, 11/5/17 # *** filename.old 2015-11-18 17:00:15.188187000 -0500 headers # --- filename.new 2015-11-18 18:00:15.332829000 -0500 headers # *************** diffbeginline # *** 328,333 **** oldfilesep # - 11/15/2015 01:00:05 LCSRnetapp-01 NOTICE raid.rg.scrub.start: /aggr1/plex0/rg1: starting scrub oldfilediffs # - 11/15/2015 01:00:05 LCSRnetapp-01 NOTICE raid.rg.media_scrub.summary.media: errors="0", rg="/a... oldfilediffs # - 11/15/2015 01:00:05 LCSRnetapp-01 NOTICE raid.rg.media_scrub.suspended: owner="", rg="/aggr1/p... oldfilediffs # - 11/15/2015 01:00:02 LCSRnetapp-01 NOTICE raid.rg.scrub.resume: /aggr0/plex0/rg0: resuming scru... oldfilediffs # - 11/15/2015 01:00:02 LCSRnetapp-01 NOTICE raid.rg.media_scrub.summary.media: errors="0", rg="/a... oldfilediffs # - 11/15/2015 01:00:02 LCSRnetapp-01 NOTICE raid.rg.media_scrub.suspended: owner="", rg="/aggr0/p... oldfilediffs # --- 327 ---- newfilesep # Above should be completely suppressed. # *** bayes.spock.cs.old 2017-04-16 02:00:03.000000000 -0400 headers # --- bayes.spock.cs.new 2017-04-16 04:00:04.000000000 -0400 headers # *************** diffbeginline # *** 1,5 **** oldfilesep # ! Apr 15 05:46:15 bayes kernel: [11127932.741674] 3w-sas: scsi4: AEN: INFO (0x04:0x0055): Battery charging ... oldfilediffs # ! Apr 15 06:06:50 bayes kernel: [11129167.777592] 3w-sas: scsi4: AEN: INFO (0x04:0x0056): Battery charging ... oldfilediffs # ! Apr 15 13:40:14 bayes kernel: [11156372.340984] 3w-sas: scsi4: AEN: INFO (0x04:0x002B): Verify completed:... oldfilediffs # ! Apr 15 15:32:21 bayes kernel: [11163099.542838] 3w-sas: scsi4: AEN: INFO (0x04:0x002B): Verify completed:... oldfilediffs # ! Apr 16 01:01:59 bayes kernel: [11197276.812739] 3w-sas: scsi4: AEN: WARNING (0x04:0x000F): SMART threshol... oldfilediffs # --- 1 ---- newfilesep # ! Apr 16 03:48:02 bayes rsyslogd: [origin software="rsyslogd" swVersion="4.6.3" x-pid="2451" x-info="http:/... newfilediffs # "Old" lines from above should be removed. # To debug this script, awk -f DEBUG=n # n=1 print input lines # n=2 and extra debugging # at diff begin line or in END, # ifseensomething or nondateseen, # if headers not printed, print headers # print diffbeginline # print oldfilesepline # if nondateseen, print oldfilediffs # print newfilesepline # print newfilediffs # olddiffbeginline=thisline # REWRITE of above to put bulk of code in newfilediffs # if not innewfilediffs, # if headers not printed, copy headers to OBUFFER # copy diffbeginline to OBUFFER # copy oldfilesepline to OBUFFER # copy newfilesepline to OBUFFER # innewfilediffs=1 # copy line to OBUFFER # END # if nondateseen, # print BUFFER # else # print OBUFFER { BUFFER[NR]=$0; # every line gets saved if (DEBUG>0) print "# in:",$0; if($1=="***"&&$3!="****") { if(DEBUG>1) print "# headers"; # 1st header line next } if($1=="---"&&$3!="----") { if(DEBUG>1) print "# headers"; # 2nd header line next } if($1=="***************"&&NF==1) { if(DEBUG>1) print "# diffbeginline"; # difference begin line diffbeginline=NR; innewfilediffs=0; next } if($1=="***"&&$3=="****") { if(DEBUG>1) print "# oldfilesepline"; # old file separator line oldfilesepline=NR; next } if($1=="-") { if(DEBUG>1) print "# oldfilediff"; # removed line # possible date formats: 11/15/2015 01:00:05 # Apr 15 05:46:15 if(($2 !~ /[0-9][0-9]*\/[0-9][0-9]*\/[0-9][0-9][0-9][0-9]/ || $3 !~ /[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/) \ &&($2 !~ /[A-Z][a-z][a-z]/ || $3 !~ /[1-9]/ || $4 !~ /[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)) { if(DEBUG>1) print "# not date match"; nondateseen=1 } next } if($1=="---"&&$3=="----") { if(DEBUG>1) print "# newfilesepline"; # new file separator line diffsepseen=1; newfilesepline=NR; next } if($1=="!" || $1=="+") { if(!diffsepseen) { if(DEBUG>1) print "# oldfilediff" # changed line before difference separator } else { if(DEBUG>1) print "# newfilediff"; # changed line after difference separator # here's where all the "work" is done... # if not innewfilediffs, if (! innewfilediffs) { # if headers not printed, copy headers to OBUFFER if (! headersprinted) { OBUFFER[++OBI]=BUFFER[1]; OBUFFER[++OBI]=BUFFER[2]; headersprinted=1 } # copy diffbeginline to OBUFFER OBUFFER[++OBI]=BUFFER[diffbeginline]; # copy oldfilesepline to OBUFFER OBUFFER[++OBI]=BUFFER[oldfilesepline]; # copy newfilesepline to OBUFFER OBUFFER[++OBI]=BUFFER[newfilesepline]; # innewfilediffs=1 innewfilediffs=1 } # copy line to OBUFFER OBUFFER[++OBI]=$0 } if(($2 !~ /[0-9][0-9]*\/[0-9][0-9]*\/[0-9][0-9][0-9][0-9]/ || $3 !~ /[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/) \ &&($2 !~ /[A-Z][a-z][a-z]/ || $3 !~ /[1-9]/ || $4 !~ /[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)) { if(DEBUG>1) print "# not date match"; nondateseen=1 } next } if(DEBUG>1) print "# UNRECOGNIZED LINE"; } END { if(DEBUG) print ""; if(DEBUG) print " ============================================================"; if(DEBUG) print ""; if (nondateseen) { for(i=1;i<=NR;i++)print BUFFER[i] } else { for(i=1;i<=OBI;i++)print OBUFFER[i] } }