Mehrere Werte in eine Variable schreiben

Mr. Brooks

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.441
Hallo,

ich will in einem Shellscript die Anzahl der Wörter in Dateien zählen und ausgeben lassen. Das geht problemlos solange es nur eine Datei ist. Für mehrere Inputs hab ich das mit For gemacht

Code:
for i; do
 count+=$(wc -w "$i")a
done

Das erstellt mir eine Variable die aus einem Zahlenwert mit einem "a" dahinter besteht. Das "a" kann ich jetzt als nutzen um die Werte wieder zu trennen und einzeln auszugeben. Geht das auch irgendwie eleganter zu lösen, vllt. mit einem Array? Mit Arrays hab ich noch nie etwas gemacht.

Mr. Brooks
 
Hilfreich wäre ggf. noch, mit welcher Shell du arbeitest und/oder ob du POSIX-compliant sein willst. Ich schätze, mit den Suchbegriffen "Array" und "Linux shell" wird man unmengen Informationen im Netz finden. Spontan kann ich dir ansonsten nicht viel weiterhelfen.
 
  • Gefällt mir
Reaktionen: madmax2010
Du kannst dem wc doch einfach mehrere Dateien mit Leerzeichen getrennt geben und bekommst als output sowohl die Wörter pro Datei, als auch gesamt. Oder meinst/brauchst du was anderes?
 
Hier ein Bash-Skript, das für Dateien, die als Parameter übergeben werden, die Wörter in ein "associative array" einliest und dann ausgibt. Aufruf mit skript *.txt oder so.

Bash:
#!/bin/bash
declare -Ax liste
while read -r worte datei ; do
    liste[$datei]=$worte
done < <(for i in "$@" ; do
    wc -w "$i"
done)
for c in "${!liste[@]}" ; do
    printf "%s\t%s\n" "$c" "${liste[$c]}" | expand -t 30
done

Davon abgesehen: Die Begriffe "elegant" und "Bash" passen nicht wirklich zusammen. Arrays insb. sind ekelhaft hässlich bei Bash. Und die Kommandozeilen-Befehle können auch oft kein Unicode. Wenn du schon Arrays brauchst würde ich stattdessen Python nehmen.
 
Zurück
Oben