Uniq mit der PowerS­hell

Im letz­ten Blog­ein­trag haben wir uns außer der Reihe Exch­ange Quo­tas auf deut­schen Ser­vern ange­se­hen.

In die­sem Blog­ein­trag komme ich zur Serie „tolle Linux bash Befehle“ mit der PowerS­hell zurück: Wir schauen uns die Por­tie­rung des bash Befehls uniq an.

Der bash Befehl uniq ist sehr mäch­tig mit vie­len Optio­nen. Der ein­fachste Ein­satz dient dem Ent­fer­nen von dop­pel­ten Zei­len in einem Text­do­ku­ment und dann auch gleich sor­tiert.

Ein typi­scher Anwen­dungs­fall ist eine Log­da­tei mit vie­len sich wie­der­ho­len­den IPs

bbirneder@bbirneder:/mnt/c/temp$ cat Logfile.txt
10.10.0.7
10.10.0.5
10.10.0.7

Mit einem sort muss ich erst sor­tie­ren und kann dann mit uniq die sor­tierte Liste von dop­pel­ten Ein­trä­gen berei­ni­gen

bbirneder@bbirneder:/mnt/c/temp$ sort Logfile.txt
10.10.0.5
10.10.0.7
10.10.0.7

bbirneder@bbirneder:/mnt/c/temp$ sort Logfile.txt |uniq
10.10.0.5
10.10.0.7

 

In der PowerS­hell gibt es kei­nen nati­ven uniq Befehl. Mit einem Get-​​Command kann ich aber suchen, ob irgend­ein ande­rer Befehl einen uniq Para­me­ter hat.

Durch den * = Wild­card kann ich unschär­fer suchen

Get-​​Command –Para­me­ter­Name Uniq* | Ft Com­mandType, Name

Und siehe da, es gibt 2 Befehle, die einen Uniq Para­me­ter mit­brin­gen.

 

Mit

Get-​​Command –Para­me­ter­Name Uniq* | FL Name,ParameterSets

kann ich sehen, dass der Para­me­ter anders als bei der bash nicht uniq, son­dern –uni­que heißt

 

Mit

Get-​​Help Select-​​Object –Para­me­ter Uni­que

kann ich mir eine kurze Hilfe zu dem Para­me­ter dazu aus­ge­ben las­sen.

In einer moder­nen Win­dows 10 PowerS­hell ist die Aus­gabe der Hilfe auf Eng­lisch,

auf einem alten, vir­tu­el­len WIn­dows 7 Cli­ent ist sie noch Deutsch

 

  • Select-​​Object –uni­que löscht alle dop­pel­ten Ein­träge (Dublet­ten)
  • Sort-​​Object –uni­que löscht alle dop­pel­ten Ein­träge (Dublet­ten) und sor­tiert die Liste

 

Unser IP Lis­ten Bei­spiel von vor­hin ginge dann so:

Die IP Liste aus­ge­ben:

Get-​​Content .\Logfile.txt

Unsor­tiert und uni­que:

Get-​​Content .\Logfile.txt |Select-​​Object –Uni­que

Sor­tiert und uni­que:

Get-​​Content .\Logfile.txt |Sort-​​Object –Uni­que

 

Wenn es um keine Text­da­tei, son­dern um eine Objekt Liste geht, dann muss ich das ent­spre­chende Attri­but ange­ben.

Als Bei­spiel habe ich hier 2 Dateien Logfile.log und Logfile.txt

Get-​​ChildItem | Ft Name,Basename,Extension

Ich möchte den Haupt­na­men (vor der Exten­sion) uni­que, d.h. ein­ma­lig bekom­men.

Mit

Get-​​ChildItem | Select-​​Object –Pro­perty Base­name –Uni­que

bekomme ich das pas­sende Ergeb­nis. Der Base­name Log­file wird nur noch 1x aus­ge­ge­ben

Was den­ken Sie?