Tabellen analysieren per BASH möglich ?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von hubert, 11.04.2007.

  1. hubert

    hubert Grünschnabel

    Dabei seit:
    11.04.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo Experten !

    Ich habe eine Frage, hoffentlich könnt Ihr mir helfen.

    Ich habe eine Menge (ca. 1000) Dateien, die alle Meßdaten in (x,y) - Form enthalten (durch einen Tabulator getrennt). Sie sind alle folgendermaßen aufgebaut

    1 <tab> 1.5
    2 <tab> 3.0
    3 <tab> 4.5
    ... ...
    200 <tab> 300

    Ich würde nun gerne in jede Zeile die zum jeweiligen x-Wert die Ableitung dazu schreiben (in Näherung als Differenzenquotienten).

    Mein Problem ist nun: Ich muß z.B. für die Formel in Zeile 27 auf Daten der Zeile 26 und 28 zugreifen usw. Das habe ich zumindest mit AWK nicht hinbekommen.

    Läßt sich das ganze automatisieren (ohne Einlesen in eine Tabellenkalkulation) ? Ich würde gerne am Ende eine Schleife über alle Dateien laufen lassen ...

    Vielen Dank für Eure Hilfe.

    Hubert
     
  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, 12.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Dein Problem ist offensichtlich die Startzeile und Endzeile genau zu erkennen.
    Wenn du das genau definieren kannst, kannst du das auch lösen.
    Mit den spärlichen Infos kann ich dir wenig helfen.
    Beispieldaten!
    Erwartete Ausgabe!
    OS
    verwendete Shell

    Gruß Wolfgang
     
  4. hubert

    hubert Grünschnabel

    Dabei seit:
    11.04.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Details

    Hallo !

    Danke für Deine Antwort.

    Also:
    Betriebssystem: Linux (Ubuntu) - deshalb bin ich in diesem Forum gelandet
    Shell: BASH (siehe Betreff)

    Die Formel, die ich verwenden will:

    Ableitung an der Stelle x:

    d(x) = 1/2 * (y(x+1) - y(x-1))

    Wie gesagt, die Daten liegen tabellarisch in x <tabulator> y - Form vor.

    1 18.852
    2 40.336
    3 75.192
    4 163.575
    5 274.782
    6 491.376
    7 810.6
    8 1402.109
    9 1972.679
    10 2825.014

    Die erwünschte Ausgabe sollte dann so aussehen:

    1 18.852
    2 40.336 28.17
    3 75.192 61.6195
    4 163.575 99.795
    5 274.782 163.9005
    6 491.376 267.909
    7 810.6 455.3665
    8 1402.109 581.0395
    9 1972.679 711.4525
    10 2825.014

    Ich hoffe, das hilft Euch weiter.

    Vielen Dank im voraus.

    Hubert
     
  5. #4 Wolfgang, 12.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Sorry, die Shell hattest du angegeben. Das habe ich übersehen.
    War wohl ein wenig spät.

    Ich sehe hier aber nicht, wo du auf Werte jenseits einer aktuelle Zeile zugreifen müsstest. :think:

    Normalerweise brauchst du doch nur die Werte x und y und die hast du ja.

    Um die Werte als Fließkommazahl zu ermitteln, brauchst du bc.
    Oder du verwendest perl oder awk.
    Beispielsnippel
    Code:
    while read x y;
    do
    if [ -z "$y" ];
    then
    echo "Kein y gefunden"
    else
    W=$(echo "scale=4;1/2 * ($y * ($x+1) - $y*($x-1))"|bc);
    echo $x $y $W;
    fi
    done <Input
    
    Das ist sicher nicht genau das was du willst, aber wie oben gesagt fehlt die Marke, wo mit Wertermittlung begonnen wird.
    Ich habe hier einfach angenommen, dass alle Werte genommen werden, solange ein y vorhanden ist.

    Das für alle dateien:
    Eine Schleife über find.
    Code:
    for F in $(find /path -type f -name "*txt"); do 
    ...
    done
    
    Gruß Wolfgang
     
  6. hubert

    hubert Grünschnabel

    Dabei seit:
    11.04.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Problem erledigt

    Hallo !

    Da hast Du mich wohl nochmal falsch verstanden.

    Mit (y(x+1) - y(x-1)) habe ich die Werte von y an der Stelle x+1 bzw. x-1 gemeint, also keine Multiplikation.

    Ich habe aber mittlerweile eine Lösung gefunden (am Anfang ganze Tabelle in ein 2dim Array einlesen und dann darauf zugreifen).

    Vielen Dank auf jeden Fall für Deine Hilfe.

    Hubert
     
Thema:

Tabellen analysieren per BASH möglich ?

Die Seite wird geladen...

Tabellen analysieren per BASH möglich ? - Ähnliche Themen

  1. Artikel: Diagramme in Linux - Vier Tabellenkalkulationen im Vergleich

    Artikel: Diagramme in Linux - Vier Tabellenkalkulationen im Vergleich: Tabellenkalkulationen sind aus der Arbeitswelt kaum noch wegzudenken. Eine ihrer Stärken ist die schnelle Visualisierung tabellarischer Daten in...
  2. [PHP] Tabellen dynamisch aktualisieren/nachladen mittels AJAX

    [PHP] Tabellen dynamisch aktualisieren/nachladen mittels AJAX: Hallo! Ich arbeite derzeit an einem in PHP realisiertem Web-Projekt. Ich würde gerne mittels AJAX eine Ausgabetablle (enthält Daten einer MySQL...
  3. SQL Tabellen synchronisiere

    SQL Tabellen synchronisiere: hi, ich möchte mir eine history von datensätzen anlegen, um änderungen nachvollziehen zu können. dazu soll die tabelle mit den sich ändernden...
  4. Tabellen vergleichen und Einträge löschen

    Tabellen vergleichen und Einträge löschen: Hi, ich habe eine SQL-Tabelle in er ich reservierte IPs eintrage und eine in die ich IPs einntrage, welche im Netz vorhanden sind. Nun versuche...
  5. [P]Mysql: 'CREATE'-Befehl zulassen aber nur für Tabellen

    [P]Mysql: 'CREATE'-Befehl zulassen aber nur für Tabellen: Hallo, Mein Problem ist folgendes: Ich lege ein Benutzer an, der nur Zugriff auf seine Datenbank hat. Folgende Befehle kann er nutzen und...