# Demo5
# Tehtävä 1
#
# teht1.awk
#
# Käyttö esim.: awk -F":" -f teht1.awk tied_nimi
#
{
if (NF>0) printf $NF
for (i=NF-1; i>0; i--) {
printf FS$i
}
printf ORS
}
tai esim. muuttujaa katenoimalla
# Demo5
# Tehtävä 1
#
# teht1.awk
#
# Käyttö esim.: awk -F":" -f teht1.awk tied_nimi
#
{
if (NF>0) tmp=$NF
for (i=NF-1; i>0; i--) {
tmp=tmp""FS""$i
}
printf tmp""ORS
}
Tehtävä 2
# Demo5
# Tehtävä 2
#
# teht2.awk
#
# Käyttö: awk -f teht2.awk
BEGIN{
FS=":"
printf "tunnus> "
getline uid < "-"
while (getline < "/etc/group")
# ensin vain "grepataan" annettua tunnusta, ei vielä anna varmaa tulosta
if (index($4,uid)) {
# jaetaan kaikki ryhmän uidit taulukoksi group
split($4,group,",")
# katsotaan onko uid taulukossa, "KALLISTA"
for (i in group) {
if (group[i] == uid) { print $1; break }
}
}
close("/etc/group")
}
Tehtävä 3
#!/bin/sh
#
# Demo5
# Tehtävä 3
#
# lotto
#
# Käyttö: lotto arvottavien_lkm pallojen_lkm
awk -v NUM=$1 -v MAXNUM=$2 '
BEGIN {
if (NUM > MAXNUM) exit
if (NUM <= 0) NUM = 7
if (MAXNUM <= 0) MAXNUM = 39
srand()
for (j = 1; j <= NUM; j++) {
do {
val = 1 + int(rand() * MAXNUM)
} while (val in rivi)
rivi[val] = val
}
k=0
# Huomaa, että "indeksi" on merkkijono ja rivi[j] on numero
for (j in rivi) jarj[k++]=rivi[j]
jarjesta(jarj,k)
for (j=0; j<k; j++) printf("%s ", jarj[j])
printf("\n")
}
function jarjesta(taulu, lkm) {
do {
for (i=0; i<lkm-1; i++) {
if (taulu[i]>taulu[i+1]) {
tmp=taulu[i]; taulu[i]=taulu[i+1]; taulu[i+1]=tmp
muuttui=1;
}
}
} while (muuttui--)
}
'
Tehtävä 4
# Demo5
# Tehtävä 4
#
# teht4.awk
#
# Käyttö: awk -f teht4.awk /etc/passwd
BEGIN{
FS=":"
}
{
#tähän voisi jonkunmoisen testin laittaa ...
nimet[substr($5,1,index($5," ")-1)]++
}
END{
for (i in nimet) {
printf "%-20s: %d\n",i,nimet[i]
}
}
Tehtävä 5
# Demo5
# Tehtävä 5
#
# teht5.awk
#
# Käyttö esim.: awk -f teht5.awk tied_nimi
BEGIN{
FS="[ ]"
}
{
for (i=1;i<=NF;i++) {
a=substr($i,1,1)
b=substr($i,2)
$i=toupper(a)""b
}
print $0
}
tai "ilman kenttiä"
# Demo5
# Tehtävä 5
#
# teht5.awk
#
# Käyttö esim.: awk -f teht5.awk tied_nimi
{
while ( i=match($0,/(^|[ ])[^A-ZÄÖÅ ]/) ) {
if (i==1) i=0 # jotta mahd. rivin ensimmäinen merkki onnistuu
a=substr($0,1,i)
b=toupper(substr($0,i+1,1))
c=substr($0,i+2)
$0=a""b""c
}
print $0
}