#! /usr/bin/gawk -f # generuje indeks slow z wejsciowego tekstu # zaklada ze dane wejsciowe sa w ASCII (i tego nie sprawdza..) { # za pomoca tablicy `seen' pilnuje by numery linijek dla jednego # slowa sie nie powtarzaly delete seen; # zaczyna sie nowa linijka, wiec zapominam o poprzednich gsub(/[^0-9A-Za-z]/, " "); # `gsub()' domyslnie dziala na $0 $0 = tolower($0); # a `tolower()' nie zmienia swego argumentu tylko zwraca wynik for (k=1;k<=NF;k++) { if ($k !~ /^[a-z]/) continue; # bo nie zaczyna sie od litery word = $k; gsub(/[0-9]/, "", word); if (length(word) < 4) continue; # bo za malo liter if (!($k in lines)) { lines[$k] = ($k ":" NR); # slowo widziane po raz pierwszy } else if (!($k in seen)) # juz bylo ale nie w tej linijce { lines[$k] = (lines[$k] "," NR); } seen[$k]++; # zapamietuje ze w tej linijce juz widzialem to slowo } } END{ sort = "sort"; for (word in lines) { print lines[word] | sort } close(sort); # na koncu programu to niekonieczne }