none
Zählen unterschiedlicher Werte in Textdatei RRS feed

  • Frage

  • Hallo zusammen,

    ich bin blutiger Anfänger und scheitere momentan grandios an einer - wahrscheinlich sehr simplen - Aufgabenstellung.

    Es werden Benutzernamen in eine Textdatei geschrieben:

    Username1

    Username2

    Username3

    Username1

    Username4

    Username2 

    ...

    Nun möchte ich die UNTERSCHIEDLICHEN Namen zählen lassen und dargestellt bekommen, wie oft jeder der enthaltenen Benutzernamen vorkommt:

    Username1 - 2

    Username2 - 2

    Username3 - 1

    Username4 - 1

    Ich finde aber absolut keine Möglichkeit, unterschiedliche Werte zählen zu lassen! Mit get-content hole ich mir den Inhalt der Textdatei, aber weder stundenlanges googlen zu "measure-object" oder Ähnlichem hat mich bisher in die Nähe des Ziels gebracht.

    Ich weiß, es gehört sich nicht hier völlig ohne Grundlage anzufragen... Aber vielleicht könnt ihr mir trotzdem einen Denkanstoß geben.

    Vielen Dank!

    Gruß

    Fab

    Mittwoch, 6. März 2013 22:41

Antworten

  • Du kannst dazu eine Hashtable missbrauchen!
    Eine Hashtable besteht aus einem Paar von Schlüssel = Wert der Schlüssel (das Schlüsselwort) darf nur einmal in der Liste vorkommen!
    Der Wert wird bei jedem vorkommen von dem Schlüssel hochgezählt.

    $Datei = 'C:\temp\user.txt'
    
    # Leere Hashtable erstellen
    $UserZaehlen = @{}
    
    # User eindeutig zählen
    # Beim ersten fund eines Users wird sein Name als Key in die Hashtable eingetragen.
    # Der Wert ist hier 1 weil der Startwert immer 0 ist, die durch das ++ hochgezählt wird (0+1).
    # Ist der Username als Key schon in der Haschtable,
    # wird der Name nicht noch einmal zugefügt, sondern der Wert des Keys wird durch das ++ hochgezählt.
    Get-Content $datei | ForEach-Object { $UserZaehlen.$_++  }
    
    # Ergebnis ausgeben
    $UserZaehlen

    Ergebnis:

    Name                           Value
    ----                                -----
    Username2                      1
    Username2                      1
    Username3                      1
    Username1                      2
    Username4                      1

    Siehe : Get-Help about_Hash_Tables #oder
    http://www.colorconsole.de/PS_Windows/de/about_hash_tables.htm


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Donnerstag, 7. März 2013 06:38

Alle Antworten

  • Du kannst dazu eine Hashtable missbrauchen!
    Eine Hashtable besteht aus einem Paar von Schlüssel = Wert der Schlüssel (das Schlüsselwort) darf nur einmal in der Liste vorkommen!
    Der Wert wird bei jedem vorkommen von dem Schlüssel hochgezählt.

    $Datei = 'C:\temp\user.txt'
    
    # Leere Hashtable erstellen
    $UserZaehlen = @{}
    
    # User eindeutig zählen
    # Beim ersten fund eines Users wird sein Name als Key in die Hashtable eingetragen.
    # Der Wert ist hier 1 weil der Startwert immer 0 ist, die durch das ++ hochgezählt wird (0+1).
    # Ist der Username als Key schon in der Haschtable,
    # wird der Name nicht noch einmal zugefügt, sondern der Wert des Keys wird durch das ++ hochgezählt.
    Get-Content $datei | ForEach-Object { $UserZaehlen.$_++  }
    
    # Ergebnis ausgeben
    $UserZaehlen

    Ergebnis:

    Name                           Value
    ----                                -----
    Username2                      1
    Username2                      1
    Username3                      1
    Username1                      2
    Username4                      1

    Siehe : Get-Help about_Hash_Tables #oder
    http://www.colorconsole.de/PS_Windows/de/about_hash_tables.htm


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Donnerstag, 7. März 2013 06:38
  • Tausend Dank, genau das habe ich gebraucht!!!! :)
    Donnerstag, 7. März 2013 10:00
  • Dann Markiere Bitte die Antwort als Antwort! Das Hilft auch anderen Forenteilnehmern die Antwort schneller zu finden.
    Man kann auch mehrere Posts als Antwort Markieren wenn die Antworten gleichwertig oder additional sind.

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Donnerstag, 7. März 2013 11:18