Daten aus xls.Datei mittels Shell analysieren

  • Hallo in die Runde,

    ich verwende seit Kurzem Linux Mint Cinnamon und würde gerne in der Shell bestimmte Daten aus einer xls.Datei ausgeben lassen.

    Aus der Vielzahl an Spalten will ich jeweils nur die Informationen aus den ersten beiden Spalten betrachten. (Die erste Spalte enthält Datumsangaben im Format xxxx-xx-xx, die zweite Spalte enthält Zahlen.)

    Folgende beiden "Aufgaben" möchte ich gerne lösen:

    1) Die Daten aufsteigend nach den Zahlen in der zweiten Spalte sortieren, dabei jeweils die Werte der beiden Spalten nebeneinander ausgeben lassen (nach Möglichkeit mit neuer Zeilennummerierung von 1 aufwärts, beziehungsweise nur die ersten 10 Zeilen).

    2) Nun möchte ich nur die Zeilen ausgeben lassen, für die ein bestimmter Stichtag zutrifft (also z.B. jeweils der 1. Februar aus allen Jahren).

    Kann mir jemand dabei helfen? Ich habe auf den Man pages zwar zu so Begriffen wie grep, cat, head, sed, sort nachgelesen, aber kann das irgendwie noch nicht sinnvoll in eine Reihenfolge bringen.

    Ich würde mich sehr über hilfreiche Hinweise freuen! Vielen Dank im Voraus!

  • Erklärst du mir bitte warum das in der Shell geschehen soll ?

    Nicht böse sein ist das eine Übungungs/Prüfungsaufgabe für den LPIC dann solltest du das beherrschen.

    Da helfe ich, dir bitte nicht sauer, nicht.

    Sonst ist das einer der komplexeren Aufgaben da solltest du dich langsam rein bringen und erst mal die Grundstruktur lernen.

    Als Anfänger rate ich dir hierzu , das ist einfacher.

    Recoll › Wiki › ubuntuusers.de

  • Hallo $ppid,

    danke für Deine Antwort!

    Nein, es handelt sich nicht um eine Prüfungsaufgabe für den LPIC, da bin ich gar nicht involviert.

    Es geht um das private Lernen mit anderen in kleinem Kreis, einfach aus Interesse.

    Allerdings haben wir uns jetzt selbst eine Aufgabe gestellt, die wir offenbar nicht lösen können, aber gerne würden, um daraus mehr Verständnis für die Funktionen abzuleiten.

  • Muss es zwingend eine XLS Datei sein?

    Oder würde auch eine CSV Datei gehen? CSV Dateien sind einfacher zum lesen.

    Falls es unbedingt Excel sein soll, dann vielleicht lieber das "neue" (Ist ja auch schon über 10 Jahre alt) XLSX Format - das ist offen dokumentiert und da findet man bestimmt auch Bibliotheken die einem helfen.

    --
    Ciao!

    Linux Nutzer seit über 20 Jahren. I ❤️ Freedom!

    Offizieller Proton-Botschafter aus der Schweiz 🇨🇭 😅

    Meine Haupt-Distribution ist Ubuntu.

    Mein Blog: https://rueegger.me

    Wer meinen sinnlosen Gedanken folgen möchte, kann dies gerne auf Mastodon tun: https://swiss.social/@srueegger

  • Oder würde auch eine CSV Datei gehen? CSV Dateien sind einfacher zum lesen.

    Falls es unbedingt Excel sein soll, dann vielleicht lieber das "neue" (Ist ja auch schon über 10 Jahre alt) XLSX Format - das ist offen dokumentiert und da findet man bestimmt auch Bibliotheken die einem helfen.

    Eindeutig .

    Sorry nichts für ungut dieses Format auszulesen, Puh.

    Ich habe keinen File mehr dieser Spezifikation um da ein genaues Ausleseverfahren wie du es wünscht zu erarbeiten.

    Da muss ich mich erst mal selber umsehen ob ich sowas noch finde auch im Net.

    Lass mir ein bisschen Zeit um selber einen File zu finden ob das so funktioniert wie ich mir das vorstelle.

    Sei nicht sauer weil ich da was rein gedeutet habe was nicht stimmt.

  • Hallo in die Runde,

    ich verwende seit Kurzem Linux Mint Cinnamon und würde gerne in der Shell bestimmte Daten aus einer xls.Datei ausgeben lassen.

    Mit Windows und installiertem Office kann man das möglicherweise als VBA Programm lösen.

    Auf der Kommandozeile mit diesem Befehl starten:

    Code
    EXCEL.EXE /e "d:\test\beispiel.xls"

    Das Beispiel Excel muss eine Sub haben die einen Autostart macht:

    Code
    Private Sub Workbook_Open()
        Call Sortierfunktion
        'ggfs.:
        'ActiveWorkbook.Save
        'Application.Quit
    End Sub

    Dann ein wenig Programmierarbeit und schwuppdiwupp geht das ;)


    Beispiele zum Sortieren:
    https://www.excel-vba-lernen.de/16-sortierfunktion

    Beispiel der Find Funktion:

    Range.Find-Methode (Excel)
    Office VBA reference topic
    docs.microsoft.com

    PC: AMD Ryzen 7 5700X | AMD RX6600 | 32GB RAM | Debian 12 Xfce
    Notebook: AMD Ryzen 5 5300U | Vega Graphic | 16GB RAM | Debian 12 Xfce

  • Allerdings haben wir uns jetzt selbst eine Aufgabe gestellt, die wir offenbar nicht lösen können, aber gerne würden, um daraus mehr Verständnis für die Funktionen abzuleiten.

    Das ist Klar und einfach über eine Sprache wie VBA unter Windows zu lösen aber wenn ich das richtig verstehe will der das explizit nicht, sondern über das Linux Terminal. ;)

    Da ist das von Sojan und kim88 eingebrachte Verfahren dienlicher.

  • Wenn wirklich bei Linux geblieben werden muss dann kommt man um Perl nicht drum herum.

    Alleine mittels Shell wird das nicht lösbar sein aber Perl ist ja auf nahezu allen Linuxrechner installiert. Und hier kann man jetzt ansetzen und sich damit beschäftigen:

    Spreadsheet::ParseExcel - Read information from an Excel file. - metacpan.org

    PC: AMD Ryzen 7 5700X | AMD RX6600 | 32GB RAM | Debian 12 Xfce
    Notebook: AMD Ryzen 5 5300U | Vega Graphic | 16GB RAM | Debian 12 Xfce

  • Wenn wirklich bei Linux geblieben werden muss dann kommt man um Perl nicht drum herum.

    Eventuell, schon ist nur ein immenser Aufwand aus Excel mit ihrem ganzen gesch.. was raus zu nehmen.

    Im Moment scheitere ich schon am Anfang jedes Excel Files, vielleicht bin ich aber zu doof dazu. :(

  • Eventuell, schon ist nur ein immenser Aufwand aus Excel mit ihrem ganzen gesch.. was raus zu nehmen.

    Im Moment scheitere ich schon am Anfang jedes Excel Files, vielleicht bin ich aber zu doof dazu. :(

    Mit Perl oder VBA geht das relativ leicht.

    PC: AMD Ryzen 7 5700X | AMD RX6600 | 32GB RAM | Debian 12 Xfce
    Notebook: AMD Ryzen 5 5300U | Vega Graphic | 16GB RAM | Debian 12 Xfce

  • Toll, vielen Dank für Euren zahlreichen Input und Eure Hilfe!

    Sojan , das Konvertieren nach csv hat schon mal geklappt.

    Dann kann ich mich jetzt daran versuchen, einzelne Spalten auszuwählen und die Daten zu sortieren - wenn ich Euch richtig verstehe, müsste das jetzt leichter gehen als mit xls-Dateien...

  • Das Auslesen und Auswerten geht dann mit dem Tool awk, sollte auf jedem Linux bereits vorhanden sein.

    Code: test.csv
    Spalte 1,Spalte 2,Spalte 3
    a,b,c
    d,e,f
    g,h,i
    j,k,l

    -F = Trennzeichen

    print $2 = zweite Spalte

    Code
    -$ awk -F ',' '{print $2}'  ~/test.csv | sort --reverse
    Spalte 2
    k
    h
    e
    b
  • Für mich anscheinend schon... Ich habe es jetzt nach Deiner Anweisung gemacht, aber da werden die Zahlen in Spalte 2 alle gerundet.

    Egal, das soll jetzt nicht so wichtig sein...

    Aber das Sortieren funktioniert jetzt immer noch nicht, weil die erste Zeile noch drin ist, welche die Namen der Spalten enthält.

    Ich müsste also die erste Zeile für das Sortieren ausschließen - das habe ich versucht mit

    csvsort -c 2 -K 1 neu.csv

    Aber da kommt eine Fehlermeldung.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!