# 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 }