it-swarm.com.de

Wie kann ich eine CSV-Datei aus einem Verzeichnis mit mehreren Spalten basierend auf den Dateinamen erstellen?

Ich habe eine Liste von Bilddateien, bei denen es sich um Scans von Belegen handelt. Sie sehen so aus:

gas_20160710_3432.jpg
gas_20160810_242.jpg
water_20161004_4510.jpg

Ich möchte in der Lage sein, die Liste der Dateien in eine CSV-Datei umzuwandeln, was ich mit dem Befehl 'ls' > files.csv tun kann.

Ich habe jedoch darauf geachtet, dass die Dateinamen einige Informationen zum Inhalt enthalten, und ich möchte die Dateinamen analysieren, damit ich beim Bearbeiten der CSV-Datei in LibreOffice Calc einfacher mit den Daten arbeiten kann.

Jeder Dateiname hat den Quittungstyp, dann das Datum im Format JJJJMMTT und dann einen Geldbetrag, der auf der Quittung angegeben ist. Daher möchte ich diese Informationen in verschiedene Spalten aufteilen und eine Spalte mit dem vollständigen Dateinamen haben. Das Endergebnis sollte also so aussehen:

enter image description here

Es gibt noch ein weiteres Problem. Das Datum muss von JJJJMMTT in JJJJ-MM-TT konvertiert werden. Ohne die Bindestriche scheint LibreOffice Calc verwirrt zu sein.

Gibt es eine Möglichkeit, die gewünschte CSV-Datei aus dem Verzeichnisinhalt über die Befehlszeile zu erstellen?

Beachten Sie, dass sich außer den Belegprüfungen keine anderen Dateien im Verzeichnis befinden, sodass keine Filterung von Dateitypen oder das Ausschließen von Dateien mit unterschiedlich formatierten Namen erforderlich ist.

1
Questioner

Perl benutzen:

ls | Perl -pe 's/(.)(.*)_(\d{4})(\d{2})(\d{2})_(\d+).jpg/\u$1$2,$3-$4-$5,$6,$&/'

In Perl wird (...) zum Gruppieren von übereinstimmendem Text verwendet. (.) ist eine Gruppe mit einem einzelnen Zeichen, (.*) ist eine Gruppe mit einer beliebigen Zeichenfolge, (\d{2}) ist eine Gruppe mit zwei Ziffern (\d ist eine Ziffer, und {2} zeigt zwei der vorherigen an) und so weiter. \u konvertiert das nächste atom in Großbuchstaben. $1, $2, ... sind die verschiedenen Gruppen in Reihenfolge. $& enthält den gesamten übereinstimmenden Text.

Ausgabe:

Gas,2016-07-10,3432,gas_20160710_3432.jpg
Gas,2016-08-10,242,gas_20160810_242.jpg
Water,2016-10-04,4510,water_20161004_4510.jpg

Sie können die Überschriften unabhängig voneinander hinzufügen.

2
muru