ubuntuusers.de

Shell - Array

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

mysterix

Anmeldungsdatum:
27. Januar 2014

Beiträge: Zähle...

Hi,

wir sollen in der Uni ein kleines Tool schreiben, welches aus einer Textdatei jedes Wort in einer einzelnen Zeile ausgibt. Das hab ich jetzt mal so gemacht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
value=`cat $1`
teiler=' ,:.;=!?'

IFS=$teiler read -ra array <<< $value

function funktion()
{
for element in "${array[@]}"
do
echo "$element";

done
}
funktion

Der aufruf wäre dann

parsen TextDatei

Damit parse ich also jedes Wort und gebe es aus. Nun habe ich nochmal nachgelesen in der Aufgabenstellung: "Das Tool soll unter allen gängigen Shells laufen" Jemand meinte gerade, dass nicht jede Shell ein Array kennt / kann. Stimmt das? Kann man das irgendwo nach lesen? Wie könnte man die Sache sonst realisieren?

Vielen Dank,

MysteriX

EDIT:

hab jetz nochmal folgendes zusammen getippt:

1
tr -s '[[:punct][:space:]]' '\n' <$1

das funktioniert super. Aber die Frage bleibt: Wie finde ich heraus ob diese Befehle in allen Shells existieren?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

Erst mal herzlich willkommen hier im Forum!

mysterix schrieb:

Damit parse ich also jedes Wort und gebe es aus. Nun habe ich nochmal nachgelesen in der Aufgabenstellung: "Das Tool soll unter allen gängigen Shells laufen" Jemand meinte gerade, dass nicht jede Shell ein Array kennt / kann. Stimmt das?

Jein: alle Bourn-Shells (also sh, dash, bash, ash, ksh, zsh) kennen mindestens das Array der Skriptargumente, das auch für die Argumente von Funktionen benutzt wird. Die bash kennt darüber hinaus noch benannte Arrays.

Deine Funktion in einer Bourne-Shell würde man möglichst kompatibel so schreiben:

1
2
3
4
5
6
7
function funktion()
{
for element
do
  echo "$element";
done
}

Wie könnte man die Sache sonst realisieren?

1
egrep -o '[[:alpha:]]+' datei

Aber die Frage bleibt: Wie finde ich heraus ob diese Befehle in allen Shells existieren?

Schau auf die Manpage der jeweiligen Shell: man bash. Ganz generell ist die Dokumentation von Software meist ein guter Startpunkt.

Ciao

robert

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi MysteriX,

erstmal herzlich willkommen hier auf dem Forum !

So 'ne blöde Aufgabe würde ich ja glatt mit einem sed- Befehl erledigen, der jedes Leer- und TAB-Zeichen einfach durch einen Zeilenvorschub ersetzt:

sed 's/[ \t]\+/\n/g'  vorlage.txt  >  wortliste.txt

Gut, hier ist noch nichts sortiert, und die Worte kommen im Zweifel auch mehrfach vor, aber die Grundaufgabe ist damit erledigt.

Vergleichbares könnte man natürlich auch mit einer Variablen-Ersetzung der Shell machen, da braucht man gar kein Array.

LG,

track

Antworten |