Daten in ein Spreadsheet zu tippen, ist einfach – sie dann wiederzufinden, eher nicht. Es sei denn, Sie haben die richtigen Tools zur Hand.
Die Suche in verschiedenen Dateiformaten ist und bleibt ein Dauerbrenner. Wer an den richtigen Stellen sucht, findet aber eine Unmenge an praktischen Werkzeugen für die Kommandozeile. Bei Bedarf lesen Sie nach, wozu diese in der Lage sind ([1],[2],[3],[4],[5]).
Aus dem Benutzen und Experimentieren mit bisher wenig eingesetzten Schaltern und Werkzeugen, die insbesondere in aktualisierten Paketen hinzukamen, ergaben sich neue, spannende Querverbindungen [6]. Im Mittelpunkt dieses Artikels steht die Frage, ob eine bestimmte Zeichenkette in einem digitalen Rechenblatt vorhanden ist, und falls ja, wo genau – quasi ein Grep für die Tabellenkalkulation.
Was wir schon kennen
In der Gnome-Abteilung der Werkzeugkiste schlummert das Kommandozeilen-Tool Ssgrep, eine Abkürzung für “spreadsheet grep”. Die Software gehört zu Gnumeric [7], der schlanken Tabellenkalkulation des Gnome-Projekts.
Entsprechend durchsucht Ssgrep vorrangig Rechenblätter, die Sie vorher mit Gnumeric erzeugt haben. Da aber Gnumeric dasselbe gepackte XML-Format verwendet wie die Tabellenkalkulation Calc von Open/LibreOffice, passt es gleich für alle drei. Experimente mit Dateien aus Microsoft Excel ab 2007 (.xlsx) waren ebenfalls von Erfolg gekrönt.
Ohne zusätzliche Schalter im Aufruf Listing 1 spuckt Ssgrep nur den oder die einzelnen Treffer aus. Das genügt, solange es nur darum geht, zu wissen, ob die Zeichenkette im Rechenblatt auftaucht. Im Beispiel aus Listing 1 sucht die Software in der Datei bestellungen.gnumeric nach der Zeichenkette Hamburg (Abbildung 1).

Abbildung 1: Mit Ssgrep suchen Sie in einem Rechenblatt, im Beispiel eines mit Bestellungen, aus der Tabellenkalkulation Gnumeric nach einer bestimmten Zeichenkette.
Listing 1
$ ssgrep Hamburg bestellungen.gnumeric
Hamburg
Um die Trefferstelle genauer einzugrenzen, kommen Schalter ins Spiel, die sich am Original-Grep orientieren. Dazu erweitern Sie im Beispiel den Aufruf um die beiden Schalter -H und -n. Ersterer sorgt dafür, dass das Programm zu Beginn jeder Zeile der Ausgabe zusätzlich den Dateinamen der Rechenblattsammlung ausgibt. Das ist nützlich, wenn Sie einen ganzen Stapel an Dateien untersuchen. Mittels -n verrät Ssgrep zusätzlich, in welchem Rechenblatt aus der Datei es fündig wurde. In Listing 2 ist es das Blatt namens Januar, wo sich Hamburg in der zweiten Zelle der ersten Spalte (A2) findet.
Listing 2
$ ssgrep -Hn Hamburg bestellungen.gnumeric
bestellungen.gnumeric:Januar!A2:Hamburg
Aber es geht noch mehr. Das Programm interpretiert das im Aufruf übergebene Muster üblicherweise als regulären Ausdruck [8]. Damit kommen Sie sowohl Tippfehlern auf die Spur als auch ähnlichen Schreibweisen. Listing 3 zeigt das anhand des Musters [Hh]amburg, was nun Treffer unabhängig von der Schreibweise des Anfangsbuchstabens ergibt. Der Schalter -w sorgt zudem dafür, dass nur ganze Worte als Treffer gelten.
Listing 3
$ ssgrep -Hnw "[Hh]amburg" bestellungen.gnumeric
bestellungen.gnumeric:Februar!A2:hamburg
bestellungen.gnumeric:Januar!A2:Hamburg
bestellungen.gnumeric:Januar!A6:hamburg
Möchten Sie die Interpretation auf feste Zeichenketten begrenzen – sprich: dafür sorgen, dass Ssgrep das Muster nicht als regulären Ausdruck begutachtet – ergänzen Sie im Aufruf den Schalter -F. Weitere Möglichkeiten fasst Tabelle “Nützliche Schalter für Ssgrep” zusammen.
|
Option |
Langform |
Bedeutung |
|---|---|---|
|
|
|
Treffer zählen |
|
|
|
Muster als String interpretieren |
|
|
|
Schreibweise ignorieren |
|
|
|
Dateinamen mit Treffer ausgeben |
|
|
|
Dateinamen ohne Treffer ausgeben |
|
|
|
Position im Rechenblatt ausgeben |
|
|
|
Formeln auswerten und darin suchen |
|
|
|
Ergebnis umkehren |
|
|
|
nur ganze Worte finden |
Schweizer Taschenmesser
Im Nebenfach von Ssgrep liegt das Werkzeug Deepgrep [9]. Es ist eine Art Schweizer Taschenmesser und gehört zur Desktop-Suche Strigi [10] aus dem KDE-Projekt (Debian-Paket strigi-utils). Neben diversen komprimierten Formaten und Archiven durchstöbert es Debian- und RPM-Pakete sowie Rechenblätter. Im Test klappte das nur mit Calc-Dateien, nicht aber mit Rechenblättern von Gnumeric – etwas verwunderlich, da beide das gleiche Datenformat verwenden (Listing 4).
Listing 4
$ deepgrep Hamburg bestellungen.gnumeric $ deepgrep Hamburg bestellungen.ods bestellungen.ods:Hamburg
Prinzipiell kommt Deepgrep auch mit Excel-Dateien zurecht, aber im Test klappte das nicht so richtig: Als Ergebnis lieferte die Software den kompletten XML-String zurück (Listing 5). Hier müssen die Entwickler noch etwas Arbeit investieren.
Listing 5
$ deepgrep eins data.xlsx
data.xslx/xl/sharedStrings.xml:<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="3" uniqueCount="3"><si><t>eins</t></si><si><t>zwei</t></si><si><t>drei</t></si></sst>
Der Autor verwendet das Programm schon seit 2012. Beim wiederholten Begutachten fielen gewisse Konstanten auf: Die Parameter entsprechen nicht denen von Grep, weder existiert eine Dokumentation noch eine Manpage. Das macht es schwierig, das Programm und seine Entwickler zu loben, obwohl das Werkzeug sehr flink und im Alltag äußerst nützlich ist. Es fasst mehrere einzelne Programme zusammen.
Die Arbeit am Framework Strigi wurde mittlerweile eingestellt, bei KDE kommt es nicht mehr als Desktop-Suche zum Einsatz: Ab KDE 4.3 trat Baloo [11] an seine Stelle. Deswegen gibt es das Paket strigi-utils nach dem Release von Debian “Jessie” nicht mehr im Repository [12], in Debian 9 “Stretch” fiel es weg.
Mit Klick
Arbeiten Sie lieber mit der Maus, sollten Sie einen Blick auf Loook [13] werfen (Abbildung 2). In Python entwickelt, sucht es nach Zeichenketten in Dateien, die Sie in Open/LibreOffice, StarOffice 6.0 oder höher und Microsoft Excel ab der Version 2007 erstellt haben. Mittlerweile von Mechtilde Stehmann gepflegt, zählt das Programm seit Debian 8 “Jessie” zum Debian-Fundus [14].

Abbildung 2: Das Programm Loook kommt mit einer Vielzahl von Office-Formaten zurecht, inklusive Microsoft Excel ab Version 2007.
Trifft keines der genannten Programme Ihren Geschmack, bleibt Ihnen noch ein Zwischenschritt über das Umwandeln ins CSV-Format. Je nach Situation ist das von Nutzen, etwa beim Weiterverarbeiten in einem Shell-Skript mittels Awk, Sed, Cut oder Tr. LibreOffice etwa bewegen Sie mit kleinen Schaltern sanft dazu, den Export vorzunehmen, ohne eine grafische Ausgabe zu produzieren (Listing 6).
Listing 6
$ libreoffice --headless --convert-to csv bestellungen.ods convert bestellungen.ods -> bestellungen.csv using Text - txt - csv (StarCalc) $ cat bestellungen.csv Ort,Nummer,Inhalt Hamburg,20170001,4 Wlan-APs UBNT NanoStation M5 Bremen,20170002,2 Wlan-APs UBNT NanoStation M5 Trier,20170003,1 Router MikroTik RB450
Ähnlich funktioniert das mit Ssconvert (“spreadsheet convert”) aus dem Gnumeric-Paket (Listing 7, erste Zeile). Es versteht nicht nur Gnumeric-Daten, sondern auch solche aus Open/LibreOffice, Sc, Paradox-Datenbanken und von Applixware, Quattro Pro, Lotus 1-2-3 sowie Multiplan. Das ermöglicht es, Daten aus alten Beständen und Backups auszulesen.
Listing 7
$ ssconvert bestellungen.gnumeric bestellungen.csv $ cat bestellungen.csv Ort,Nummer,Inhalt Hamburg,20170001,"4 Wlan-APs UBNT NanoStation M5" Bremen,20170002,"2 Wlan-APs UBNT NanoStation M5" Trier,20170003,"1 Router MikroTik RB450" $ ssconvert -O 'quoting-mode=never' bestellungen.gnumeric bestellungen.txt $ cat bestellungen.txt Ort,Nummer,Inhalt Hamburg,20170001,4 Wlan-APs UBNT NanoStation M5 Bremen,20170002,2 Wlan-APs UBNT NanoStation M5 Trier,20170003,1 Router MikroTik RB450 $ ssconvert -O 'separator=;' bestellungen.gnumeric bestellungen.txt $ cat bestellungen.txt Ort;Nummer;Inhalt Hamburg;20170001;"4 Wlan-APs UBNT NanoStation M5" Bremen;20170002;"2 Wlan-APs UBNT NanoStation M5" Trier;20170003;"1 Router MikroTik RB450"
Anders als LibreOffice (Listing 6) packt die Software um Zeichenketten mit Leerzeichen noch Hochkommas. Wenn Sie das nicht mögen, schalten Sie das mit dem speziellen Parameter -O 'quoting-mode=never' beim Export ab (Listing 7, Zeile 7). Dabei wertet Ssconvert die Erweiterung der Ausgabedatei aus: Steht da .csv, grummelt es und ignoriert die Option für den Export. Nur bei einer Ausgabedatei mit der Endung .txt läuft alles glatt durch [15]. Ähnlich gehen Sie vor, wenn Sie ein alternatives Trennzeichen in der CSV-Datei verwenden möchten: Die Option für ein Semikolon lautet -O 'separator=; (Listing 7, Zeile 13).
Ähnliche Werkzeuge sind etwa Xlsx2csv [16], Csvkit [17] und Agate [18]. Alle drei setzen auf Python und stehen als DEB-Pakete für Debian und Ubuntu bereit.
Fazit
Mittels Ssgrep, Deepgrep und Loook durchforsten Sie die Rechenblätter fast jeder Tabellenkalkulation. Alle drei Werkzeuge binden Sie problemlos in ein Skript ein, was eine Suche ohne grafische Oberfläche ermöglicht, etwa auf einem Webserver. Für das Umwandeln nach CSV steht Ssconvert bereit und nimmt Ihnen die knifflige Arbeit ab.
Danksagung
Der Autor bedankt sich bei Axel Beckert, Mechtilde Stehmann und Gerold Rupprecht für deren Kritik und Anregungen im Vorfeld des Artikels.
Infos
-
“Grep Everything”: http://noone.org/blog/English/Computer/Shell/grep%20everything.futile
-
Suche in Archiven: Axel Beckert, Frank Hofmann, “Nadel im Datenhaufen”, LU 04/2012, S. 78, https://www.linux-community.de/25403
-
Suche in Datenformaten, Teil 1: Axel Beckert, Frank Hofmann, “Mit Struktur”, LU 06/2012, S. 82, https://www.linux-community.de/25404
-
Suche in Datenformaten, Teil 2: Axel Beckert, Frank Hofmann: “Durchgekämmt”, LU 07/2012, S. 84, https://www.linux-community.de/25972
-
LibreOffice-Dateien durchsuchen: Frank Hofmann, “Flink durchleuchtet”, LU 12/2012, S. 82, https://www.linux-community.de/27276
-
“Find Files That Contain A Certain Content”: http://www.stackabuse.com/linux-find-files-containing-text/
-
Gnumeric (Debian-Paket): https://packages.debian.org/stretch/gnumeric
-
Reguläre Ausdrücke: Frank Hofmann, “Schnipseljagd”, LU 09/2011, S. 84, https://www.linux-community.de/24091
-
Deepgrep: http://noone.org/blog/English/Computer/Debian/CoolTools/deepgrep.futile
-
Strigi-utils (Debian-Paket): https://packages.debian.org/jessie/strigi-utils
-
Baloo, (Debian-Paket): https://packages.debian.org/stretch/baloo
-
Loook: http://mechtilde.de/Loook/
-
Loook (Debian-Paket) https://packages.debian.org/stretch/loook
-
Excel-Dateien konvertieren: https://linuxconfig.org/converting-xlsx-excel-format-files-to-csv-on-linux
-
Xlsx2csv (Debian-Paket): https://packages.debian.org/de/stretch/xlsx2csv





