Set Operations in the Unix Shell                                                            v1.01
               Created b...
Upcoming SlideShare
Loading in...5
×

Set Operations in Unix Shell

1,907

Published on

Created at http://www.catonmat.net

This document implements 14 set operations by using common Unix utilities such as sort, uniq, diff, comm, cat, head, tail, awk, and others. It implements the following operations: Set Membership. Set Equality. Set Cardinality. Subset Test. Set Union. Set Intersection. Set Complement. Set Symmetric Difference. Power Set. Set Cartesian Product. Disjoint Set Test. Empty Set Test. Minimum. Maximum.

Visit http://www.catonmat.net for full explanation of these operations!

Published in: Self Improvement, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,907
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
50
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Set Operations in Unix Shell

  1. 1. Set Operations in the Unix Shell v1.01 Created by Peteris Krumins (peter@catonmat.net). Peter's blog: http://www.catonmat.net – good coders code, great reuse Set Membership grep -xc 'element' set grep -xq 'element' set awk '$0 == quot;elementquot; { s=1; exit } END { exit !s }' set awk -v e='element' '$0 == e { s=1; exit } END { exit !s }' set Set Equality diff -q <(sort set1) <(sort set2) diff -q <(sort set1 | uniq) <(sort set2 | uniq) awk '{ if (!($0 in a)) c++; a[$0] } END{ exit !(c==NR/2) }' set1 set2 awk '{ a[$0] } END{ exit !(length(a)==NR/2) }' set1 set2 Subset Test comm -23 <(sort subset | uniq) <(sort set | uniq) | head -1 awk 'NR==FNR { a[$0]; next } { if !($0 in a) exit 1 }' set subset Set Union Set Intersection cat set1 set2 comm -12 <(sort set1) <(sort set2) awk 1 set1 set2 grep -xF -f set1 set2 cat set1 set2 ... setn sort set1 set2 | uniq -d cat set1 set2 | sort -u join <(sort -n A) <(sort -n B) sort set1 set2 | uniq awk 'NR==FNR { a[$0]; next } $0 in a' set1 set2 sort -u set1 set2 awk '!a[$0]++' Set Complement Set Cardinality comm -23 <(sort set1) <(sort set2) wc -l set | cut -d' ' -f1 grep -vxF -f set2 set1 wc -l < set sort set2 set2 set1 | uniq -u awk 'END { print NR }' set awk 'NR==FNR { a[$0]; next } !($0 in a)' set2 set1 Set Symmetric Difference comm -3 <(sort set1) <(sort set2) | sed 's/t//g' comm -3 <(sort set1) <(sort set2) | tr -d 't' sort set1 set2 | uniq -u cat <(grep -vxF -f set1 set2) <(grep -vxF -f set2 set1) grep -vxF -f set1 set2; grep -vxF -f set2 set1 awk 'NR==FNR { a[$0]; next } $0 in a { delete a[$0]; next } 1; END { for (b in a) print b }' set1 set2 Power Set $ p() { [ $# -eq 0 ] && echo || (shift; p quot;$@quot;) | while read r ; do echo -e quot;$1 $rn$rquot;; done } $ p `cat set` Set Cartesian Product while read a; do while read b; do echo quot;$a, $bquot;; done < set1; done < set2 awk 'NR==FNR { a[$0]; next } { for (i in a) print i, $0 }' set1 set2 Disjoint Set Test Empty Set Test comm -12 <(sort set1) <(sort set2) wc -l set | cut -d' ' -f1 awk '++seen[$0] == 2 { exit 1 }' set1 set2 wc -l < set awk '{ exit 1 }' set Minimum head -1 <(sort set) awk 'NR == 1 { min = $0 } $0 < min { min = $0 } END { print min }' Maximum tail -1 <(sort set) awk 'NR == 1 { max = $0 } $0 > max { max = $0 } END { print max }'

×