Ik moest voor school een opdracht maken in unix met shellscripts en nawk.
De opdracht luidt als volgt:
een script schrijven dat een alfabetisch geordende lijst genereert van
de woorden die in een textfile (moet als argument worden meegegeven) voorkomen. Achter ieder woord moet een lijst komen van pagina- en regulnummers waarop dat woord voorkomt. Het aantal regels waaruit een pagina bestaat moet als argument aan het index script worden meegegeven.
Het programma moet ongevoelig zijn voor leestekens en hoofdletterongevoelig.
De uitvoerlijst en de lijst van lokaties per woord moet netjes geformatteerd
zijn. Je mag een te lange regel niet laten doorlopen op de volgende regel
maar je moet hem opsplitsen in meerdere regels.
Dit is al gelukt, maar ik heb 2 tussenbestanden gebruikt, en verder heb ik het idee dat het een stuk eenvoudiger kan, maar ik weet niet hoe.
Dit is wat ik heb:
Iemand idee hoe ik dit kan inkorten, of zonder tussenbestanden te doen?
De opdracht luidt als volgt:
een script schrijven dat een alfabetisch geordende lijst genereert van
de woorden die in een textfile (moet als argument worden meegegeven) voorkomen. Achter ieder woord moet een lijst komen van pagina- en regulnummers waarop dat woord voorkomt. Het aantal regels waaruit een pagina bestaat moet als argument aan het index script worden meegegeven.
Het programma moet ongevoelig zijn voor leestekens en hoofdletterongevoelig.
De uitvoerlijst en de lijst van lokaties per woord moet netjes geformatteerd
zijn. Je mag een te lange regel niet laten doorlopen op de volgende regel
maar je moet hem opsplitsen in meerdere regels.
Dit is al gelukt, maar ik heb 2 tussenbestanden gebruikt, en verder heb ik het idee dat het een stuk eenvoudiger kan, maar ik weet niet hoe.
Dit is wat ik heb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| cat $1 |
tr '[A-Z]' '[a-z]' |
tr -cs '\012[a-z]' '[ *]' > gefilterd
for i in `cat gefilterd`
do
echo $i >> woordenlijst
done
sort woordenlijst |
uniq > woordenlijst
for j in `cat woordenlijst`
do
k=0
echo $j `nawk '/^'"$j"' / || / '"$j"' / || / '"$j"'$/ {regel = NR % '"$2"';
pagina = (NR - regel) / '"$2"' + 1;
if (regel==0) {regel = '"$2"'; pagina = NR/'"$2"'};
k=k+1;
if(k==10){printf "\n\t";k=0};
printf "%d(%d) ", pagina, regel}' gefilterd` | more
done
rm woordenlijst
rm gefilterd |
Iemand idee hoe ik dit kan inkorten, of zonder tussenbestanden te doen?