Your IP : 216.73.216.176
| Current Path : /bin/ |
|
|
| Current File : //bin/rgw-gap-list-comparator |
#!/usr/bin/awk -f
#
# Version 1
#
# This awk script takes two, similarly sorted lists and outputs
# only the lines which exist in both lists. The script takes
# three inputs:
#
# ./rgw-gap-list-comparator \
# -v filetwo=gap-list-B.txt \
# -v matchout=matched_lines.txt \
# gap-list-A.txt
#
function usage() {
print "">>"/dev/stderr"
print "">>"/dev/stderr"
print "The idea behind the script is to eliminate false positive hits">>"/dev/stderr"
print "from the rgw-gap-list tool which are due to upload timing of new">>"/dev/stderr"
print "objects during the tool's execution. To use the tool properly,">>"/dev/stderr"
print "the following process should be followed:">>"/dev/stderr"
print "">>"/dev/stderr"
print "">>"/dev/stderr"
print " 1: Run the 'rgw-gap-list' tool twice">>"/dev/stderr"
print "">>"/dev/stderr"
print " 2: Sort the resulting map files:">>"/dev/stderr"
print " $ export LC_ALL=C">>"/dev/stderr"
print " $ sort gap-list-A.gap > gap-list-A.sorted.gap">>"/dev/stderr"
print " $ sort gap-list-B.gap > gap-list.B.sorted.gap">>"/dev/stderr"
print " -- Where the A / B in the gap-list file names are the date/time associated with each of the respective 'rgw-gap-list' outputs">>"/dev/stderr"
print "">>"/dev/stderr"
print " 3: Run the 'same_lines_only.awk' script over the two files:">>"/dev/stderr"
print " $ rm matched_lines.txt">>"/dev/stderr"
print " $ ./rgw-gap-list-comparator -v filetwo=gap-list-B.sorted.gap -v matchout=matched_lines.txt gap-list-A.sorted.gap">>"/dev/stderr"
print " -- Where the A / B in the gap-list file names are the date/time associated with each of the respective 'rgw-gap-list' outputs">>"/dev/stderr"
print "">>"/dev/stderr"
print " The resulting 'matched_lines.txt' will be a high confidence list of impacted objects with little to no false positives.">>"/dev/stderr"
print "">>"/dev/stderr"
print "">>"/dev/stderr"
exit 1
}
function advance_f2() {
if ((getline f2line<filetwo) <= 0) {
f2_eof=1
} else {
f2_count++
}
}
function test_lines() {
if($0==f2line) {
print $0>>matchout
lineoutcount++
advance_f2()
return 0
} else if ($0>f2line) {
return 2
} else {
return 1
}
}
function status_out() {
printf("%s % 17d\t% 17d\t% 12d\n",get_date_time(),f1_count,f2_count,lineoutcount)>>"/dev/stderr"
}
function get_date_time() {
dtstr="date +%F\\ %T"
dtstr | getline mydt
close(dtstr)
return mydt
}
BEGIN {
if(filetwo==""||matchout=="") {
print "">>"/dev/stderr"
print "">>"/dev/stderr"
print "Missing parameter."
print "">>"/dev/stderr"
print "">>"/dev/stderr"
usage()
}
f1_count=0
f2_count=0
lineoutcount=0
f2_eof=0
statusevery=100000
advance_f2()
printf("%s File 1 Line Count\tFile 2 Line Count\tPotentially Impacted Objects\n",get_date_time())>>"/dev/stderr"
status_out()
}
{
f1_count++
if(f2_eof==0) {
if(test_lines()==2) {
while($0>f2line && f2_eof==0) {
advance_f2()
}
test_lines()
}
} else {
exit 0
}
if ((f1_count % statusevery)==0) {
status_out()
}
}
END {
if(f1_count>0) {
status_out()
}
}