Robert Fidytek

Transkrypt

Robert Fidytek
SYSTEMY OPERACYJNE
Laboratorium_5
MENU
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
Ostatnia aktualizacja: 2005-03-23 10:51:31
Pliki do zadań: lab5_pliki.zip.
Zadania - awk (gawk).
Napisać następujące programy w awk:
1. 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)
2. 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
3. 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 +
4. 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 +
5. Posortować i wypisać z pliku "/etc/passwd" loginy wszystkich użytkowników.
awk 'BEGIN {FS=":"} {print $1} ' /etc/passwd |sort
Lukasz Komar +
6. Wypisać z pliku "/etc/passwd" wszystkie linie dłuższe niż 80 znaków.
awk 'length($0)>80 ' /etc/passwd
Justyna Benkowska +
7. 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=":"}
Piotr Kisieliczyn +
$5 =="" {print $1}' /etc/passwd
8. 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 zad8awk puste_linie.txt
Karol Wenta +
9. Przepisz z pliku wejściowego "liczby.txt" linie, które są liczbami rzeczywistymi.
10. 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
}
???
11. 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 +
12. 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 +
13. 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 +
14. 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 +
15. Wypisać wszystkie wina wytrawne i półwytrawne.
awk ' $(NF-2)=="wytrawne" || $(NF-2)=="półwytrawne" ' wina.txt
Paweł Brzeski +
16. Wypisać gatunki win, dla których obrót był większy od 10 tysięcy.
awk ' $(NF-1)*$NF > 10000
Justyna Benkowska ++
' wina.txt
17. 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 +
18. 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
19. Wypisać wino, którego sprzedaż przyniosła największy obrót.
zad19.awk
--------------------------
#!/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 ++
20. 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 zad20awk /etc/passwd
Karol Wenta +
Zadania trudniejsze:
1. 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 +++
2. 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 +++
3. 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
4. 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"
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
}
}
???
5. Napisać dwa ciekawe programy (operujące na dwóch plikach i/lub wykonujące operacje
administratorskie).
Copyright © by Robert Fidytek.

Podobne dokumenty