Použité články
Väčšina úloh pochádzala z dvojice článkov:
Dodatočné úlohy pracovali nad súborom /tmp/cisari.txt
:
Meno, Datum narodenia a umrtia, datum panovania
-----------------------------------------------
Frantisek Jozef I., 1887-1922, 1848-1916
Karol I. Habsbursky, 1830-1916, 1916-1918
Ferdidand I. Dobrotivy, 1793-1875, 1835-1848
Frantisek II. Habsbursky, 1768-1835, 1792-1835
Leopold II. Habsbursky, 1747-1792, 1790-1792
Jozef II., 1741-1790, 1765-1790
Maria Terezia, 1717-1780, 1740-1780
Nájdite najdlhšie vládnuceho vládcu/vládkyňu
#!/bin/awk -f
BEGIN {
FS=", "
MAX = 0;
NAJDLHSI = ""
}
NR >= 3 {
split($3, ROKY, "-")
print $1, ROKY[2] - ROKY[1]
if (ROKY[2] - ROKY[1] > MAX) {
MAX = ROKY[2] - ROKY[1]
NAJDLHSI = $1
}
}
END {
print "============="
print NAJDLHSI, MAX
}
- použime shebang line, tak ako v prípade bežných shellskriptov
awk
potrebuje parameter-f
pre uvedenie cesty k súboru so skriptom- nastavíme field separator v
BEGIN
, lebo v shebangu sa nastavuje cez-F
podivným spôsobom.
Alternatívne
#!/bin/awk -f
BEGIN {
FS=", "
OFS="|"
}
NR >= 3 {
split($3, ROKY, "-")
print $1, ROKY[2] - ROKY[1]
}
Voláme
./najdlhsi_vladca2.awk < /tmp/cisari.txt | sort -t'|' -k2nR
- Nastavíme výstupný oddeľovač OFS na rúru.
- Triedime potom podľa druhého stĺpca (
-k2
), numericky (lebo inak sa použije lexikografické triedenie, kde 1 < 13 < 2) a obrátene. Výsledok voliteľne obseknemehead
om.
Vygenerujte SQL INSERTy do databázy
#!/bin/awk -f
BEGIN {
FS=", "
OFS=","
}
NR > 2 {
split($2, ZIVOT, "-")
split($3, VLADA, "-")
print "INSERT INTO cisari VALUES ('" $1 "'", ZIVOT[1], ZIVOT[2], VLADA[1], VLADA[2] ");"
}
- nastavíme výstupný oddeľovač na čiarku
- vygenerujeme separátne
INSERT
y, lebo pri hromadnom použití sa nevieme zbaviť koncovej čiarky.