Frage von DonFa, 54

Bash Script xlsx auslesen?

Hey,

ich habe folgendes Problem:

Ich möchte eine xlsx Datei auslesen, die datei ist so aufgebaut:

Unternehmen           Methode     Domain

Musterunternhemen     TLS         @beispiel.com

Den grep befehl zum suchen des Bereichs habe ich schon zum Teil.

grep -Po "[a-zA-Z0-9_-]*\.[a-z]{2,4}"

Doch fehlt mir noch die möglichkeit, dass nur die TLS ausgegeben werden.

Die Aufgabe: erstelle ein Bash Script welches nur die Domains ausließt, die die Methode TLS haben und diese dann ausgibt.

Das Notebook an dem ich die Aufgabe bekommen habe, hat kein zugriff aufs Internet. Es virtualiseirt eine Linux Mint worin ich arbeite.

Ich hoffe mir kann jemand helfen, komme gearde echt kein bisschen weiter.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von guenterhalt, Community-Experte für Linux, 28

warum als Bash-Script?
Mit tclsh kann man so etwas viel lesbarer schreiben.
Installiere tcl, schreibe den Code in eine Datei, mache sie ausführbar chmod 755 <Datei-Name> und rufe sie auf

./<Datei-Name>  <xlsx-Datei>

Hier der  Code  ( ohne Komfort )

#!/bin/bash
# \
exec tclsh "$0" "$@"

set fp [open $argv r ] ; # Datei öffnen, Dateiname wurde als Parameter übergeben

while { ![eof $fp] } { set line [gets $fp ] ; # lesen einer Zeile aus der Datei
set list [split $line {} ] ; # jedes Zeichen der Zeile separieren
set chars [llength $list ] ; # Anzahl der Zeichen bestimmen
set firma "" ; # Variable für das erste Wort
set i 0 ; # Index auf Anfang
while { [lindex $list $i ] != " " && $i < $chars } { append firma [lindex $list $i ] ; incr i } ; # alle Zeichen bis zum ersten Leerzeichen in firma
while { [lindex $list $i ] == " " && $i < $chars } { incr i } ; # alle Leerzeichen überspringen
set method [lindex $list $i ] ; # Variable für Methode definieren und mit erstem Zeichen füllen
while { [lindex $list $i ] != " " && $i < $chars } { append method [lindex $list $i ] ; incr i } ; # alle Zeichen bis zum nächsten Leerzeichen in methode
while { [lindex $list $i ] == " " && $i < $chars } { incr i } ; # alle Leerzeichen überspringen
set link [lindex $list $i ] ; # Variable für Link definieren und mit erstem Zeichen füllen
while { [lindex $list $i ] != " " && $i < $chars } { append link [lindex $list $i ] ; incr i } ; # alle Zeichen bis zum Ende nächsten Leerzeichen oder "Ende" in link

# Daten ausgeben , nachfolgend die Domain

puts $link

}
close $fp
Kommentar von DonFa ,

Hey, danke für die Hilfe, doch die Aufgabe wurde mir so von meinem Unterweiser gestellt. Meine Frage ist auch nur ein kleiner ausschnitt des an sich geforderten Programms. Doch ist es irgendwie möglich ohne etwas zu installieren etc. meine Frage zu lösen o:

Kommentar von guenterhalt ,

so hört sich das ganz anders an.

Ohne etwas zu installieren? Linux ist frei konfigurierbar und die bash gilt zwar als Standard-Shell.
Was aber wenn sich jemand erlaubt hat diese Shell nicht zu installieren?
Was machst du dann, wenn zusätzliches "verboten" ist?

 

Kommentar von DonFa ,

Aktuell schreibe ich das Script auf einem Notebook meines Unterweisers, welches aus Sicherheitsvorkehreungen keine Adminrechte, sowie blockierte USB Ports hat. Es soll jedoch auch später möglich sein, es auf einem Server laufen zu lassen.(Als anfänger das direkt auf dem Server zu schreiben, wäre etwas gefährlicher) (Kurzfassung des gesamten Scripts: Es soll zwei Datein vergleichn und die jeder Datei einzigartigen Daten ausgeben)

Kommentar von guenterhalt ,

das mit Installieren habe ich geschrieben, weil ich Mint nicht kenne.
Bei openSuSE ist tcl ( Aufruf mit tclsh ) bei der Standard-Installation bereits dabei. Vielleicht auch bei Mint.
Keine Admin-Rechte ist schon o.k. . Warum aber keine USB-Ports ?
Hat der die Module (Treiber)  entfernt ?

Kommentar von DonFa ,

Das sind Firmen Notebooks. Es sollen keine USB Geräte (Außer Maus) angeschlossen werden, da ja Schadware übertragen werden könnte.

Antwort
von PhotonX, 38

Schau mal hier: http://stackoverflow.com/questions/10557360/convert-xlsx-to-csv-in-linux-command... Allgemein gibt Google für "parse xlsx bash" recht viele Treffer.

Kommentar von DonFa ,

Mein Problem ist, dass ich auf diesem Notebook nur User und kein Admin bin. Ich habe keine Berechtigungen um etwas zu installieren. :/

Kommentar von PhotonX ,

Nun, du kannst auch Gnumerics von hier herunterladen, kompilieren und im Benutzerverzeichnis installieren: http://ftp.gnome.org/pub/gnome/sources/gnumeric/1.12/gnumeric-1.12.32.tar.xz

Kommentar von LeBonyt ,

Kann man nur machen, wenn  alle Abhängigkeiten zur Kompilierung von gnumetrics erfüllt sind. Beim Kompilieren muss man hier und da noch ein dev-Paket installieren. Und wenn der Fragesteller keine root Rechte wird es kompliziert.

Kommentar von PhotonX ,

Ja, das stimmt, ggf. müssen auch Abhängigkeiten kompiliert und im gleichen Benutzerverzeichnis installiert werden. Aber ich denke, so viele ungewöhnliche Abhängigkeiten hat Gnumerics nicht. Habe so schon mal eine neuere Version von Gnuplot installiert, weil die dort vorhandene veraltet und buggy war.

Keine passende Antwort gefunden?

Fragen Sie die Community