• Nie Znaleziono Wyników

Laboratorium 05 - awk

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium 05 - awk"

Copied!
4
0
0

Pełen tekst

(1)

SYSTEMY OPERACYJNE

M E N U

Ogłoszenia Plan_laboratoriów Laboratorium_1 Laboratorium_2 Laboratorium_3 Laboratorium_4 Laboratorium_5 Laboratorium_6 Kol_1_fin_03_04 Kol_1_imn_03_04 Kol_konkurs1 Giełda_zadań Laboratorium_8 Laboratorium_9 Laboratorium_10 Linki

Laboratorium_5

Ostatnia aktualizacja: 2005-03-23 10:51:31

Pliki do zadań: lab5_pliki.zip.

Zadania - awk (gawk).

Napisać następujące programy w awk:

Z pliku "/etc/passwd" wyświetlić nazwy tych użytkowników, którzy korzystają z interpretera tcsh.

awk 'BEGIN {FS=":"} /tcsh/ {print $1} ' /etc/passwd Paweł Brzeski ++ (pierwszy wykonał zadanie)

1.

Z pliku "/etc/passwd" wyliczyć sumę i średnią arytmetyczną wszystkich numerów UID.

awk 'BEGIN{FS=":"; s=0;} {s+=$3}

END{srednia=s/NR; print "srednia:", srednia", suma", s "." ;} ' /etc/passwd Justyna Benkowska

2.

Z pliku "/etc/passwd" wypisać dane użytkowników należących do grupy pracown (zobacz w /etc/group).

awk 'BEGIN {FS=":"} "/home/pracown/" {print $1} ' /etc/passwd Lukasz Komar +

3.

Z pliku "/etc/passwd" wypisać wszystkie wpisy o innych użytkownikach niż root, których UID jest równy 0, w przeciwnym przypadku wypisać test informujący, że takich użytkowników nie znaleziono.

zad4.awk

---BEGIN {FS=":"}

$1!="root" && $3=="0"{nie++;print $1}

END {if(nie==0) print"nie znaleziono uzytkownikow"} ---awk -f zad4.---awk /etc/passwd

Marcin Krzyżanowski +

4.

Posortować i wypisać z pliku "/etc/passwd" loginy wszystkich użytkowników.

awk 'BEGIN {FS=":"} {print $1} ' /etc/passwd |sort Lukasz Komar +

5.

Wypisać z pliku "/etc/passwd" wszystkie linie dłuższe niż 80 znaków.

awk 'length($0)>80 ' /etc/passwd Justyna Benkowska +

6.

Z pliku "/etc/passwd" wyświetlić nazwy tych użytkowników, którzy nie mają wypełnionego pola numer 5 (dodatkowe informacje o użytkowniku).

awk 'BEGIN {FS=":"} $5 =="" {print $1}' /etc/passwd Piotr Kisieliczyn +

7.

Przepisz plik wejściowy "puste_linie.txt" zastępując kolejne puste wiersze, jednym pustym wierszem.

zad8.awk

---NF == 0 {nb++}

NF > 0 {if (nb > 0) print " " ; nb =0; print $0;}

---awk -f zad8---awk puste_linie.txt

Karol Wenta +

(2)

Przepisz z pliku wejściowego "liczby.txt" linie, które są liczbami rzeczywistymi. 9.

Przepisz z pliku wejściowego "liczby.txt" liczby należące do określonego przedziału. Składnia: nazwa-skryptu początek-przedziału koniec-przedziału

#! /usr/bin/awk -f BEGIN { MIN = ARGV[1] MAX = ARGV[2] delete ARGV[1] delete ARGV[2] ARGV[1] = "liczby.txt" ARGC += 1 ARGIND = 0 print MIN, MAX }

/[0-9]+/ {

if ($0 >= MIN && $0 <= MAX) print $0

}

???

10.

Z pliku "telefony.txt" wypisać imiona i nazwiska wszystkich osób, których telefony zaczynają się od 058.

awk ' $NF ~ /^058/ {print $2" "$1} ' telefony.txt Paweł Brzeski +

11.

Z pliku "telefony.txt" wypisać imiona i nazwiska wszystkich Kowalskich, których telefony zaczynają się od 058.

awk '$1 ~"Kowalsk[ia]" && $3 ~/^058/ {print $1, $2}' telefony.txt Dagmara Zellma +

12.

Z pliku "telefony.txt" wypisać imiona i nazwiska osób, które nie nazywają się Kowalski lub Kowalska.

awk '!~ /Kowalsk[ia]/ {print $1" "$2}' telefony.txt Tomasz Wojtowicz +

13.

Wypisać wszystkie wina francuskie. (Każdy wiersz pliku "wina.txt" zawiera: nazwę wina, symbol kraju-producenta, kolor, smak, cenę w złotych oraz liczbę butelek sprzedanych w ostatnim miesiącu.)

awk '$(NF-4)=="Fra"' wina.txt Malgorzata Krzyzanowska +

14.

Wypisać wszystkie wina wytrawne i półwytrawne.

awk ' $(NF-2)=="wytrawne" || $(NF-2)=="półwytrawne" ' wina.txt Paweł Brzeski +

15.

Wypisać gatunki win, dla których obrót był większy od 10 tysięcy.

awk ' $(NF-1)*$NF > 10000 ' wina.txt Justyna Benkowska ++

16.

Wypisać wina francuskie, dla których obrót był większy od 10 tysięcy.

awk '$(NF-4)=="Fra" && $(NF-1) * $NF>10000' wina.txt Piotr Kisieliczyn +

17.

Obliczyć obrót dla win białych i czewonych oraz łączny obrót.

zad18.awk

{obrot = $NF * (NF-1); oo += obrot } $(NF-3) ~/białe/ {biale += obrot}

$(NF-3) ~ /czerwone/ {czerwone += obrot}

END {print "Obrót razem:", oo ",w tym : czerwone", białe:", białe".";} Malgorzata Krzyzanowska

18.

Wypisać wino, którego sprzedaż przyniosła największy obrót.

zad19.awk

(3)

#!/usr/bin/awk -f NR=1 {omax=$NF*$(NF-1)} {o=$NF*$(NF-1)

if(omax < o) {omax=o; f=$0} else {if(omax==o) {f=f"n"$0}}} END {print omax; print f} ---chmod 775 zad19.awk

./zad19.awk wina.txt Paweł Brzeski ++

Z pliku "/etc/passwd" wypisać wszystkie wiersze, które mają puste pola.

zad20.awk

---BEGIN {FS = ":"}

{for (i=1 ; i <= NF && $i=" "; i++) ;

if (i <= NF) {print} }

---awk -f zad20---awk /etc/passwd

Karol Wenta +

20.

Zadania trudniejsze:

Określić ilość piątków 13-tego w roku zadanym jako parametr (cal).

zad1t.awk

#!/usr/bin/awk -f

BEGIN { FS = " "}

($(6) == "13" || $(13) == "13" || $(20) == "13") {i++} END {printf "n%dn",i}

chmod 775 zad1t.awk cal 2005 |./zad1t.awk Piotr Jarosz +++

1.

Napisać program, do konwersji pliku tekstowego pomiędzy DOS'em a UNIX'em (gsub).

awk 'BEGIN {print$0} {gsub{"^M","n"}} {print$0}' zrodlo.txt > nowe.txt Magdalena Wiesner +++

2.

Wypisać w porządku leksykograficznym wszystkie słowa z pliku "wierszyk.txt" razem z ilością ich wystąpień.

#!/usr/bin/awk -f

BEGIN { FS="[- ,;.[]!?]"} {for(i=1; i<=NF; i++) {ls[$i]++}}

END { for(word in ls) {if(word)print word, ls[word] | "sort"}}

Paweł Brzeski ++

Uwaga: Jest rozróżnialna wielkość liter

3.

Dane są dwa pliki: "prostokat.txt" i "opis.txt". W jednym z nich znajduje się prostokąt zbudowany ze znaków x, zaś drugi zawiera liczby opisujący wymiary tego prostokąta. Napisać program

sprawdzający poprawność prostokąta (wymiary, boki, znaki składowe).

#! /usr/bin/awk -f BEGIN { getline < "opis.txt" HEIGHT=$1 WIDTH=$2 ARGV[1] = "prostokat.txt" 4.

(4)

ARGC += 1 h = 0 } /x+/ { w = length($1) h += 1 if (w != WIDTH) {

print "nie zgadza sie szerokosc " exit

} }

/[^x]+/ {

print "zakazane znaki" exit

}

END {

if (h != HEIGHT) {

print "nie zgadza sie wysokosc " exit

} }

???

Napisać dwa ciekawe programy (operujące na dwóch plikach i/lub wykonujące operacje administratorskie).

5.

Cytaty

Powiązane dokumenty

W ten sposób możecie nie tylko dalej promować czytelnictwo, ale również podzielić się z innymi wiedzą o tym, jak organizuje się

Zosia, Lord później Antoś i John. Lord (we

Jako PRACĘ DOMOWĄ , bardzo proszę zrobić ćwiczenia znajdujące się w karcie pracy (PRESENT SIMPLE-ĆWICZENIA).. PRACĘ DOMOWĄ proszę przesłać na maila do PIĄTKU, 22.05.2020

Ludzie często zobowiązują się do czegoś, często też nie wywiązują się ze swoich zobowiązań i uważają, że nic takiego się nie stało.. Spróbujcie

Każdy atom wiąże się ze swoimi czterema naj- bliższymi sąsiadami czterema dwuelek- tronowymi wiązaniami kowalencyjnymi (jedynie dla czterech wewnętrznych ato- mów pokazano na

Wielomian stopnia n może mieć co najwyżej n pier- wiastków... Udowodnij, że dla żadnego argumentu całkowitego nie przyjmuje on

Wydaje się, że to jest właśnie granica, wzdłuż której przede wszystkim tworzyła się Europa Wschodnia, lub raczej wschodnia wersja „europejskości”: jest to

Pierwiastki równania są wyświetlane z dokładnością do dwóch miejsc