I have a source file with two similar yet subtly different sections. I\'d like to merge the two sections into one subroutine with a parameter that handles the subtle difference
i chose to rework @ordnungswidrig's answer into a bash function (i was only interested in the differences from a single file, but this could easily be changed to handle two different files...):
# find differences within a file giving start and end lines for both sections function diff_sections { local fname=`basename $1`; local tempfile=`mktemp -t $fname`; head -$3 $1 | tail +$2 > $tempfile && head -$5 $1 | tail +$4 | diff -u $tempfile - ; rm $tempfile; }
you call the function like so...
diff_sections path/to/file 464 483 485 506
Any diff tool that lets you manually adjust the alignment will do the job. Diffuse (http://diffuse.sourceforge.net/) is my favourite and it also lets you manually adjust the alignment.
Emacs has ediff-regions-wordwise for this -- you can take two buffers (or just one) and select a region in each, which ediff will then show for comparison.
The linediff plugin for Vim works well for me. Visually select one section of your file and type :Linediff
. Visually select the other section and type :Linediff
. It will put vim in to vimdiff mode, showing only the two sections you highlighted previously. Type:LinediffReset
to exit vimdiff mode.
More info:
https://unix.stackexchange.com/a/52759/32477
https://superuser.com/a/414958/199800
I use Beyond Compare.
It allows you to select a line on each side and say 'Align Manually'. This should work just fine for you.
KDiff3 is open source and available on several platforms including Win32 and Linux.
It has the "manual alignment" feature discussed by Gishu about Beyond Compare (which by the way I haven't been using personally but is considered a great tool by many people I know).
See this answer for more examples.