Daten aus xls.Datei mittels Shell analysieren

  • Aber egal, was ich tue - die Daten werden immer nach der ersten Spalte sortiert, nicht nach der zweiten!

    Ich habe u.a. versucht

    sort -n -K 2 ganzneu.csv

    und

    sort -n -K 2,2 ganzneu.csv

    etc.

    Nichts hilft... es kommt eine elendig lange Wurst von

    ",

    ",

    ",

    dann eine ewige Wurst der Spalteninhalte (Spalten 1 + 2)

    2018-10-21, "21

    2018-10-22, "21

    etc.

    dann eine ewige Wurst

    Confirmed,

    Confirmed,

    etc.

    dann eine ewige Wurst

    E-Value,

    E-Value,

    etc.

    Ich habe keine Ahnung, was ich noch versuchen soll!

  • Beim nächsten Post mit "Code </>" den Code formatieren damit es klar ersichtlich ist, das Beispiel war ja komplexer und mit geschweiften Klammern usw.

    Code
    awk -F ',' '{print $1 "," $2}' test.csv > neu.csv

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

  • Ok...

    "Code</ sort -g -K 2 ganzneu.csv>"

    und

    "Code</ sort -h -c 2 ganzneu.csv>"

    hilft auch nicht...

    Wie kann ich denn bloß eine Spalte auf- oder absteigend nach ihren Zahlenwerten sortieren?

    Ist das wirklich so kompliziert?

    Ich verstehe es einfach nicht. Warum wird bei meinem Befehl die erste Spalte mit dem Datum sortiert, und nicht die zweite mit den Zahlen?

  • Meine Sortierung sieht ständig aus wie folgt - egal ob ich mit -g oder -h oder -n sortiere:

    Die Zahlenreihe beginnt mit 100,1436

    und steigt dann auf bis 237,4123

    dann geht es plötzlich weiter bei 23,9435

    und steigt dann auf bis 99,9502.

    Mir ist schon klar, dass der Computer irgendwie anders zählt als wir Menschen;-) Aber es wäre wirklich toll zu verstehen, womit ich ihn füttern muss, damit er so zählt wie wir!

  • Der Befehl sort hat noch ein paar Optionen mehr.

    • -t = Trennzeichen
    • -n = numerisch (sortiert dann numerisch, nicht alphabetisch)

    Da jetzt schon ein paar Schritte zusammengekommen sind, macht langsam auch ein Script Sinn.

    Habe jetzt als Trennzeichen ein Semikolon genommen, dass macht es später mit den Dezimalwerten leichter.

    Code: original.xls
    Spalte 1    Spalte 2    Spalte 3    Spalte 4
    a            1,85           m            h
    d            10,13          o            i
                
    g            5,51           u            j
    j            6,77           z            k
    Bash
    #!/bin/sh
    
    # .xls nach .csv umwandeln mit Semikolon als Trennzeichen
    libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)":"59,ANSI,1" original.xls 
    
    # Leere Zeilen löschen (beginnen mit ;;)
    sed -i '/;;/d' original.csv
    
    # Die ersten beiden Spalten ausgeben und nach der zweiten Spalte sortieren
    awk -F ';' '{print $1 ";" $2}' original.csv | sort -t ';' -nk 2 > final.csv

    Ausgabe

    Code: final.csv
    Spalte 1;Spalte 2
    a;1,85
    g;5,51
    j;6,77
    d;10,13
  • Sojan Mann du emulierst ja schneller als Einsteins Relativitätstheorie ;) da komme ich alter Ruheständler ja nicht hinter her. :thumbup:

    Jetzt weiß ich warum ich mich manchmal so Alt fühle. ;(

  • Wir hangeln uns langsam durch die Bash-Tools. :)

    • sed
    • awk
    • sort
    • ...

    eher shell, das sind alles standard programme von linux bzw shell nicht von bash

    PC:      Ryzen 9 7950 X3D, 64GB DDR5 RAM, Sapphire 7900 XTX - Arch Linux Plasma

    Laptop:    Lenovo Legion 5 AMD    - Manjaro KDE

    Server1:   Dedicated von Hetzner   - Debian Linux (für Xmpp+omemo, und Gameserver)

    ServerHome:   2x Xeon E5 2630v4, 64GB DDR4, 2x Raid5, 2x 512GB SSD - Debian Linux (als KVM host, NAS, ...)

  • eher shell, das sind alles standard programme von linux bzw shell nicht von bash

    Ohh Mann du bist ja päpstlicher als der Papst. ?(

    Sag man das heute überhaupt noch? 8|

    Sojan hat es drauf und hilft, egal auch wenn er sich da verschrieben hat. ;)

    Eher ein Grund zur Freude oder nicht. :)

  • Sojan hat es drauf und hilft

    Das unterschreibe ich sofort!!! :thumbup::thumbup::thumbup:

    Laptop:    Thinkpad X260 (i7 6600U, 16GB RAM) - MX Linux/Win11

    Zweitrechner: Dell 3070 MFF (i5-9500T, 32GB RAM) - derzeit Win10

    Hauptrechner: Eigenbau (Intel Core i5-12400, GTX 1060 6GB,16GB RAM, 10-Gbit-LAN) Manjaro 23.1.3

    Server:   Eigenbau (i5-12600T, 64GB RAM, 3x NVMe-SSD 1x500GB+2x1TB, 2x SSD 1TB) - PROXMOX

    Diverse Raspis | 3D Drucker | 24/7-Server Fujitsu Futro m. PROXMOX

  • Vielen Dank, ich finde es wirklich total toll, muss ich an dieser Stelle mal sagen, dass Ihr mich bei meinem Problem so unterstützt!!!

    Ich bin erst jetzt wieder am Rechner und werde mal weiter probieren - vielleicht klappt es ja schon mit diesen Hinweisen!

    Tausend Dank schon einmal!

  • Hab mal ne csv erstellt und die sieht so im Terminal aus die Trenner sind Tabulatoren:

    jetzt zu der filterung:

    bei NR==1 kannst du zb zu 2 ändern dann wird die 1te zeile ausgelassen und hinten dann nl -v 1 setzen dann beginnt nummerierung wieder bei 1


    wenn du es in ne neue datei haben willst:

    Code
    awk 'NR==1, NR==11{FS="\t"; print $1, $2|"sort -nk2"}' ka.csv > new.csv

    PC:      Ryzen 9 7950 X3D, 64GB DDR5 RAM, Sapphire 7900 XTX - Arch Linux Plasma

    Laptop:    Lenovo Legion 5 AMD    - Manjaro KDE

    Server1:   Dedicated von Hetzner   - Debian Linux (für Xmpp+omemo, und Gameserver)

    ServerHome:   2x Xeon E5 2630v4, 64GB DDR4, 2x Raid5, 2x 512GB SSD - Debian Linux (als KVM host, NAS, ...)

    Einmal editiert, zuletzt von LucyDemoon (1. Februar 2022 um 23:03)

  • Ein herzliches Hallo in die Runde,

    nach dem Verwandeln ins csv-Format habe es jetzt mit folgendem "Trick" geschafft:

    11

    csvsort -c 2 -l -L="DE_de" ganzneu.csv | csvformat -T | head -n 11

    Der L="DE_de" Befehl hat offenbar bewirkt, dass die Zahlen "richtig" gereiht werden;-)

    Vielen, vielen Dank nochmal Euch allen und weiterhin Frohes Schaffen!

  • Ja, das hatte ich ganz zu Beginn probiert, das klappte aber nicht - später stellte sich dann raus, dass die xls-tabelle offenbar einige nicht ganz sauber befüllte Felder hatte, mit denen sich manche Funktionen zwar so la la ausführen ließen, andere aber nicht.

Jetzt mitmachen!

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