Comparing two lists
Chip Camden
sterling at camdensoftware.com
Sat May 7 18:09:07 UTC 2011
Quoth Chad Perrin on Saturday, 07 May 2011:
> On Sat, May 07, 2011 at 02:09:26AM +0200, Rolf Nielsen wrote:
> >
> > I have two text files, quite extensive ones. They have some lines in
> > common and some lines are unique to one of the files. The lines that do
> > exist in both files are not necessarily in the same location. Now I need
> > to compare the files and output a list of lines that exist in both
> > files. Is there a simple way to do this? diff? awk? sed? cmp? Or a
> > combination of two or more of them?
>
> Disclaimer:
>
> This should probably be done with Unix command line utilities, and most
> likely by way of comm, as others explain here. On the other hand, the
> others explaining that have done an admirable job of giving you some
> pretty comprehensive advice on that front before I got here, so I'll give
> you an alternative approach that is probably *not* how you should do it.
>
> Alternative Approach:
>
> You could always use a programming language reasonably well-suited to
> admin scripting. The following is a one-liner in Ruby.
>
> ruby -e 'foo = File.open("foo.txt").readlines.map {|l| l.chomp}; \
> bar = File.open("bar.txt").readlines.map {|l| l.chomp }; \
> foo.each {|num| puts num if bar.include? num }'
>
> Okay, so I'm kinda stretching the definition of "one-liner" if I'm
> using semicolons and escaping newlines. If you really want to cram it
> all into one line of code, you could do something like replace the
> semicolons (and newline escapes) with the "and" keyword in each case.
>
> http://pastebin.com/nPR42760
>
> --
> Chad Perrin [ original content licensed OWL: http://owl.apotheon.org ]
You could even just output the intersection of the two lists:
ruby -e 'puts File.open("foo.txt").readlines.map {|l| l.chomp} & \
File.open("bar.txt").readlines.map {|l| l.chomp }'
And to comply with DRY:
ruby -e 'def fl(f) File.open(f).readlines.map {|l| l.chomp}; end; \
puts fl("foo.txt") & fl("bar.txt")'
--
.O. | Sterling (Chip) Camden | http://camdensoftware.com
..O | sterling at camdensoftware.com | http://chipsquips.com
OOO | 2048R/D6DBAF91 | http://chipstips.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-questions/attachments/20110507/3f8666ff/attachment.pgp
More information about the freebsd-questions
mailing list