Cvičebnica z PowerShellu, diel 3.

Vytvorte v domovskom adresári súbor ahoj.txt s obsahom AHOJ

echo "Ahoj" > ahoj.txt

Toto je klasická finta známa ešte z čias MS-DOSu (a fungujúca aj na Linuxe).

Alternatívne: pošlime do rúry reťazec a cez Set-Content ho uložme do súboru.

"AHOJ" | Set-Content ahoj.txt

Alternatívne:

"AHOJ" | sc ahoj.txt

Overte existenciu súboru ahoj.txt

cat ahoj.txt

Toto je klasická linuxovina. V skutočnosti je cat alias pre Get-Content (gc):

Get-Content ahoj.txt 

Vytvorte v domovskom adresári zoznam desiatich súborov tyzden1.txt … tyzden10.txt

1..10 | % {"" | set-content tyzden$_.txt}

Zistite adresár, v ktorom sa nachádzajú položky Plochy.

Informáciu možno získať z registrov z položky HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders, v kľúči Desktop.

Overte, že sa naozaj v registroch nachádza. Položka je typu expandovateľný reťazec a premenná %USERPROFILE% sa automaticky expanduje na správnu hodnotu podľa aktuálne prihláseného používateľa.

(gi 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders').GetValue("Desktop")

Vytvorte na ploche súbor poznamky.txt

$DesktopDir = (gi 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders').GetValue("Desktop")
"" | sc $DesktopDir\poznamky.txt

Stiahnite z PowerShellu súbor http://ics.upjs.sk/~novotnyr/home/skola/systemove_programovanie/mena.txt

(New-Object System.Net.WebClient).DownloadString("http://ics.upjs.sk/~novotnyr/home/skola/systemove_programovanie/mena.txt") | Set-Content mena.txt

V textovom editore vytvorte súbor mena.txt s nasledovným obsahom:

Jozef Košický,študent,Hlavná 25,Košice
Milan Košický,študent,Leninova 66,Košice
Zuzana Mikulášska,zamestnankyňa,Poľná 25, Liptovský Mikuláš
Júlia Spišskohôrna,študentka,Alana Turinga 25, Spišská Hôrna
Jeremiáš Prešovský,školník,Industriálna 15, Prešov

Vypíšte obsah súboru mena.txt

Get-Content mena.txt

Alternatívne:

gc mena.txt

Vypíšte len riadky, ktoré obsahujú študentov

Get-Content mena.txt | where {$_ -like "*študent*"}

Alternatívne:

gc mena.txt | ? {$_ -like "*študent*"}

Alternatívne:

gc mena.txt | ? {$_ -match "študent"}

Súbor je reprezentovaný ako zoznam reťazcových riadkov, overte to:

Get-Content mena.txt | Get-Member

Vypíšte len riadky, ktoré obsahujú študentov začínajúcich sa na „J“

Get-Content mena.txt | where {$_ -like "J*"}

Vypíšte len riadky, ktoré sa začínajú sa na „J“ a reprezentujú len zamestnancov

Get-Content mena.txt | where {($_ -like "J*") -and ($_ -notlike "*zamestnanec*")}

Vypíšte jednotlivé slová z gramatickej vety zadanej na vstupe

"Byť, či nebyť, to je otázka".split()

Metóda split() rozdelí text podľa oddeľovača, výsledkom je zoznam s jednotlivými oddelenými prvkami.

Alternatívne sa dá použiť operátor –split

"Ahoj svet" -split " "

Z textu „Ahoj svet“ vypíšte len prvé slovo

"Byť, či nebyť, to je otázka".split()[0]

K zoznamu môžeme pristupovať pomocou poľovej notácie.

Alternatívne:

("Byť, či nebyť, to je otázka" -split " ")[0]

Alternatívne:

"Byť, či nebyť, to je otázka" -split " " | select -first 1

Vypíšte len mená zo súboru mena.txt

get-content mena.txt | % {$_.split(",")[0]}

Metóda split() má parameter, kde vieme špecifikovať oddeľovač. (Implicitný oddeľovač je medzera).

Vypíšte mená, ktoré sa končia na „A“

get-content mena.txt | % {$_.split(",")[0]} | ? {$_ -like "*a"}

Alternatívne pomocou regulárnych výrazov:

get-content mena.txt | ? {$_ -match ".+a,"}

Vypíšte ľudí, ktorých priezvisko sa začína na „K“

get-content mena.txt | ? {$_ -match "^(.+) K"}

Vypíšte iniciály mien

get-content mena.txt | ? {$_ -match "^(.).+? (.).+"} | % {$matches[1] + ". " + $matches[2] + "."}

Nahraďte v súbore mena.txt výskyt „študent“ výskytom „poslucháč“

Prvý chybný nástrel:

gc mena.txt | % {$_ -replace "študent", "poslucháč"} | sc mena.txt

Dostaneme hlášku The process cannot access the file because it is being used by another process. Namiesto toho uložme výstup do separátneho súboru, originálny súbor zmažme a nový výstup premenujme (toto vyžaduje trojriadkový skript).

Zistite frekvencie jednotlivých slov v súbore

gc babel.txt | % { 
    $_.split() | % { 
        $_.toLower().Trim() -replace "[^a-z]", "" | ? {$_.Length -ge 0 }
    }  
} | Group-Object | Sort Count
  • Vyjdime z cmdletu Get-Content, ktorý pošle do rúry jednotlivé riadky súboru.
  • Každý riadok rozdelíme na slová cez Split: vzniknú tým jednotlivé slová, ktoré preiterujeme v podrúre.
  • Každé slovo zhodíme na malé písmená, odsekneme začiatočné a koncové medzery a každé nepísmeno nahradíme prázdnym znakom. Zároveň do rúry pošleme len slová, ktorá po upratovaní majú stále nenulovú dĺžku.
  • Všetky slová zgrupneme cez Group-Object, čím získame frekvencie.
  • Tie už len potriedime podľa počtu a sme hotoví.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *