textdatei in tabelle ausgeben

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von villiboy, 09.01.2006.

  1. #1 villiboy, 09.01.2006
    villiboy

    villiboy Mitglied

    Dabei seit:
    07.04.2005
    Beiträge:
    37
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 09.01.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  4. #3 villiboy, 09.01.2006
    Zuletzt bearbeitet: 09.01.2006
    villiboy

    villiboy Mitglied

    Dabei seit:
    07.04.2005
    Beiträge:
    37
    Zustimmungen:
    0
    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.........
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich würde es mit perl machen, vielleicht mit 2-dimensionalen Hashs.

    Gruss, Phorus
     
  6. #5 ninguno, 09.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    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
     
  7. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Nur zur Info: hash = associative arrays :)
     
  8. #7 ninguno, 10.01.2006
    Zuletzt bearbeitet: 10.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    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
     
  9. #8 villiboy, 14.01.2006
    villiboy

    villiboy Mitglied

    Dabei seit:
    07.04.2005
    Beiträge:
    37
    Zustimmungen:
    0
    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
     
  10. #9 ninguno, 14.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    also bei mir funktionierts so. wie schaut denn deine input datei gaeste.txt aus?
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 villiboy, 14.01.2006
    villiboy

    villiboy Mitglied

    Dabei seit:
    07.04.2005
    Beiträge:
    37
    Zustimmungen:
    0
    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"])
    }
     
  13. #11 ninguno, 14.01.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    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
     
Thema:

textdatei in tabelle ausgeben

Die Seite wird geladen...

textdatei in tabelle ausgeben - Ähnliche Themen

  1. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...
  2. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...
  3. SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird

    SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird: Hallo Ich bin andauernd Opfer einer Brute Force Attacke. Die IPs die fehlerhafte Logins produzieren werden nach dem 3ten Versuch gesperrt. Aber...
  4. Programm für Audiodatei in Textdatei konvertieren

    Programm für Audiodatei in Textdatei konvertieren: Hallo, ich habe für ein Projekt eine Menge Interviews geführt und habe diese digital auf dem Rechner. Allerdings dauert das Abtippen ewig....
  5. nach einem wort in einer textdatei suchen

    nach einem wort in einer textdatei suchen: halloooo ihr lieben, ich hoffe ihr könnt mir weiterhelfen :) ich lernen momentan die skriptsprache shell und alles was dazu gehört. ich soll...