Mengenoperationen auf Listen in bash

Ein eigentlich alltägliches Problem, welchem ich mich aber noch nicht richtig gestellt habe, da es meist kleine (aber oft ineffektive) Workarounds gibt.

Zur Betrachtung:
Eine Zeile einer Liste entspricht einem Element in der Menge.

Anmerkungen:
Das Programm comm erwartet sortierte Listen.

Deshalb betrachten wir hier zwei sortierte (mittels sort) und eindeutige (durch uniq, nach voriger Sortierung) Listen, welche also entsprechend auch als zeilenweise Mengen aufgefasst werden können.

Ich nenne sie in dem Beispiel A und B.

Hier nun ein paar Ansätze zum Durchführen von gängigen Mengenoperationen:

  • Vereinigung (A∪B)
    sort -m A B | uniq
  • Komplement (A\B)
    comm -23 A B
  • Schnitt (A∩B)
    comm -12 A B

Durch diese Grundoperationen Vereinigung, Komplement und Schnitt lassen sich vielfäligte Operationen sehr leicht und effizient auf Listen implementieren.

Quelle: http://wordaligned.org/articles/shell-script-sets [4.4.2011 11:30]

bier

Leave a Reply


Smilies
;-) 8-| :-( :-S (?) ;-O :-) :-| :roll: :D (!) :deifel-grins: :-D :mundwinkel: :shame: (->) (8-) :( :grins: :deifel: >:-( :licht: :vonhinne: :anal: :angry: :sauer: :musica: 8| :kplan: :dancingbanana1: :dancingbanana2: :rastabanana: :party: :dancingbanana3: :drink: :biertje: :besoffen: :eatme: :koffie; :doener: :disco: :drummer: :band: :akkordeon: :schlaf: :suff: :druf: :spinn: :pirat: :daumenhoch: :baeh: :shit: :kotz: :haeh: :hilfe: :guitar: :noergel: :huepf: :dutt: :verschallert: :bonghit: :huetchen: :tuetchen: :brenndeifel: :hanf: :appl: :jummyweed: :peace: :sinnlos: :bigdutt: :zerschlagen: :gutenacht: :banned: :zombie: :hitme: :babbel: :boaah: :bumm: :heul: :darockter: :lowrider: :dancing: :emo: :weizen: :titti: :geflasht:



Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien: