1. #!/bin/bash 
  2. # sort_uniq.sh 
  3.  
  4. : << EOF 
  5. runcmd="bash sort_uniq.sh m n" 
  6.  
  7. commands                       |    output 
  8. -------------------------------------------------------------- 
  9. cat m | xargs                  |    1 2 3 a b c 
  10. cat n | xargs                  |    3 a b c d e 
  11. runcmd  n+m         |  xargs   |    a  b  c  d  e  1  2  3 
  12. runcmd  "m&&n"      |  xargs   |    a  b  c  3 
  13. runcmd  "m+n-m&&n"  |  xargs   |    d  e  1  2 
  14. runcmd  "m-n&&m"    |  xargs   |    1  2 
  15. runcmd  "n-m&&n"    |  xargs   |    d  e 
  16. EOF 
  17.  
  18. plus() 
  19.   sort -g ${1} ${2} | uniq ${3} 
  20.  
  21. mius() 
  22.   sort -g <(plus ${1} ${2} -d) ${3} | uniq -u 
  23.  
  24. case ${3} in 
  25.      "${1}+${2}"|"${2}+${1}")   plus ${1} ${2}                ;; 
  26.      "${1}&&${2}"|"${2}&&${1}") plus ${1} ${2} -d             ;; 
  27.      "${1}-${1}&&${2}"|"${1}-${2}&&${1}") mius ${1} ${2} ${1} ;; 
  28.      "${2}-${1}&&${2}"|"${2}-${2}&&${1}") mius ${2} ${1} ${2} ;; 
  29.      "${1}+${2}-${1}&&${2}"|"${1}+${2}-${2}&&${1}"|"${2}+${1}-${1}&&${2}"|"${2}+${1}-${2}&&${1}") plus ${1} ${2} -u ;; 
  30. esac