textdatei in tabelle ausgeben

villiboy

villiboy

Mitglied
hi leute,
ich möchte eine textdatei in einer tabelle ausgeben.
die textdatei sieht wie folgt aus.

hugo kaffee -1
hugo cola 4
eva cola 3
eva kaffee -2
walter kaffee 5
walter cola 3
usw.

diese datei möchte ich gerne als tabelle ausgeben. also in folgender form:

Getraenkeliste
--------------------------------
Name Kaffee Cola ......
--------------------------------
hugo -1 4 ......
eva -2 3
walter 5 3
........
.......
...... u.s.w

ich habe das ganze mal mittels awk probiert und bekomme es einfach nicht hin. die formatierung geht schon aber wie lese ich die daten so aus?
es wäre nett, wenn mir da jemand helfen könnte!!

danke
 
Hallo
Wenn du es mit awk machen willst, verfütterst du einfach den Dateinamen an awk.
In $0 steht die gesamte Zeile, in $1 das erste Feld $2....
Die Option awk -F"ZEICHEN" erlaubt dir einen eigenen Feldtrenner zu Setzen.

Eine andere Möglichkeit ist die Verwendung von read.
Code:
while read VAR1 VAR2 VAR3 ;
      do
      echo -e "$VAR1\t$VAR2\t$VAR3\n";
done <INPUTDATEI >OUTPUTDATEI

Gruß Wolfgang
 
soweit habe ich das auch schon hinbekommen. nur kapiere ich nicht wie ich die zweite spalte vom gleichen namen in die tabelle bekomme, ohne das der namen zweimal aufgeführt wird?
also wenn zweimal hugo drin steht, sollte nur einmal hugo rausgenommen werden und die jeweilige getränkeanzahl dann in die entsprechenden spalten eingetragen werden......

also aus gaeste.txt

hugo kaffee -1
hugo cola 3

sollte in der tabelle

hugo -1 3 stehen.........
 
Zuletzt bearbeitet:
Ich würde es mit perl machen, vielleicht mit 2-dimensionalen Hashs.

Gruss, Phorus
 
oder in awk mit associativen arrays
Code:
awk 'BEGIN {i=0} { Names[i++]=$1; MyARRAY[$1,$2] = $3} END { for (i in Names) printf("%s %d %d\n", Names[i],  MyARRAY[Names[i],"kaffee"], MyARRAY[Names[i],"cola"]) }' gaeste.txt | sort -u
 
Phorus schrieb:
Nur zur Info: hash = associative arrays :)
ja ich weiss. es sei noch angemerkt, dass sich das ganze sicher auch über normale shell arrays lösen liesse. ist halt ein bissel aufwändiger
 
Zuletzt bearbeitet:
ok, ich habe mich jetzt für die variante vom ninguno entschieden, doch leider gibt er mir so immer die namen und 0 0 aus, woran könnte dies liegen? ich möchte ja die werte haben. es wäre nett, wenn mir da jemand weiterhelfen könnte!! Danke

Code:
awk 'BEGIN {i=0} { Names[i++]=$1; MyARRAY[$1,$2] = $3} END { for (i in Names) printf("%s %d %d\n", Names[i],  MyARRAY[Names[i],"kaffee"], MyARRAY[Names[i],"cola"]) }' gaeste.txt | sort -u
 
also bei mir funktionierts so. wie schaut denn deine input datei gaeste.txt aus?
 
joh ich habe den fehler gefunden. nur jetzt habe ich noch ein problem mit der überschrift! wenn ich das ergebnis sortiere nimmt es die überschrift auch mit also den tabellenkopf, wie könnte ich das lösen? denn wenn ich awk -f trinksoft.awk database_getraenke.txt sort -u aufrufe sortiert es mit die überschrift mit ..., wie umgehe ich das problem?

danke

hier der code:

#!bin/bash
BEGIN {
i=0;
printf("-------------------------------------\n")
printf("Name\t Kaffee\t Cola\t Bier\t Fanta\t\n")
printf("-------------------------------------\n")
}

{
Names[i++]=$1; MyARRAY[$1,$2] = $3
}

END {
for (i in Names)
printf("%s\t %d\t %d\t %d\t %d\t\n", Names, MyARRAY[Names, "Kaffee"], MyARRAY[Names,"Cola"], MyARRAY[Names,"Bier"], MyARRAY[Names,"Fanta"])
}
 
a) die erste zeile (#!bin/bash) in deinem awk script solltest du weggeben, oder auf den pfad zu deinem awk binary abändern (#!/usr/bin/awk). es handelt sich ja schliesslich um ein awk script und nicht um ein bash script.
b) am besten machst du die ausagabe des headers nicht im awk script, sondern in einem shell script aus dem du dein awk script aufrufst
Code:
echo -e '-------------------------------------\n'
echo -e "Name\t Kaffee\t Cola\t Bier\t Fanta\t\n"
echo -e '-------------------------------------\n'
awk -f trinksoft.awk database_getraenke.txt | sort -u
 

Ähnliche Themen

Spalten einer Datei in neue Datei integrieren.

Bestimmte Zeilen einer Spalte addieren

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Zeilen löschen und ersetzen mit sed

awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung

Zurück
Oben