Ich habe eine Ordnerstruktur wie: -
Type1 Type 2
| |
----------------------------------------------------------------------------------------
| | |
subType1 subType2 subType1
| | |
----------------------------------------------------------------------------------------------------------
| | | | | |
typeA typeB typeA typeB typeA typeB
-------------------------------------------------------------------------------------------------------------
| | | | | | | | | | | | | | | | | |
F1 F2 F3 F1 F2 F3 F1 F2 F3 F1 F2 F3 F1 F2 F3 F1 F2 F3
| | | |
| | | |
\/ \/ \/ \/
--------------------------------------------------------------------------------------------------------------
| | | | | | | | | |
black red blue black red black red blue black red
In jedem Farbordner sind einige Bilder wie dieses :-(und viele mehr)
Type1-subType1-typeA-black-dfsdf1.JPG Type1-subType1-typeB-black-one.JPG
Type1-subType1-typeA-red-dfsdf1.JPG Type1-subType1-typeB-red-one.JPG
Type1-subType1-typeA-blue-dfsdf1.JPG Type1-subType1-typeB-black-oh.JPG
Type1-subType1-typeA-black-2dsfsdf.JPG Type1-subType1-typeB-red-oh.JPG
Type1-subType1-typeA-red-2dsfsdf.JPG
Type1-subType1-typeA-blue-2dsfsdf.JPG
Type1-subType1-typeA-black-3asdfdf3.JPG
Type1-subType1-typeA-red-3asdfdf3.JPG
Type1-subType1-typeA-blue-3asdfdf3.JPG
Type1-subType2-typeB-black-SSS.JPG Type2-subType1-typeB-black-5.JPG
Type1-subType2-typeB-red-SSS.JPG Type2-subType1-typeB-black-5.JPG
Type1-subType2-typeB-blue-SSS.JPG Type2-subType1-typeB-black-565.JPG
Type1-subType2-typeB-black-AAA.JPG Type2-subType1-typeB-black-565.JPG
Type1-subType2-typeB-red-AAA.JPG
Type1-subType2-typeB-blue-AAA.JPG
Ich möchte jedes Bild lesen und in einer einzelnen CSV-Datei speichern. Das CSV-Dateiformat lautet also:
Für die Ordnerstruktur Type1-subType1-typeA -dfsdf1.JPG into file1.csv
Image name |colour | subcat| subtype | Type1 |
Type1-subType1-typeA-black-dfsdf1.JPG | black | typeA | subType1 | Type1 |
Type1-subType1-typeA-red-dfsdf1.JPG | red | typeA | subType1 | Type1 |
Type1-subType1-typeA-blue-dfsdf1.JPG | blue | typeA | subType1 | Type1 |
Für die Ordnerstruktur Type1-subType1-typeA -2dsfsdf.jpg file2.csv
Image name |colour | subcat| subtype | Type1 |
Type1-subType1-typeA-black-2dsfsdf.JPG | black | typeA | subType1 | Type1 |
Type1-subType1-typeA-red-2dsfsdf.JPG | red | typeA | subType1 | Type1 |
Type1-subType1-typeA-blue-2dsfsdf.JPG | blue | typeA | subType1 | Type1
Und so weiter auch für andere Ordner. Wie kann ich die gewünschte Ausgabe erhalten?
Hinweis: Der Bildname spiegelt die Ordnerstruktur wider.
Bisher habe ich alle Bilder aus verschiedenen Ordnern in eine einzige CSV-Datei eingelesen. Hier ist meine Ausgabe:
Image name |colour | subcat| subtype | Type1 |
Type1-subType1-typeA-black-dfsdf1.JPG | black | typeA | subType1 | Type1 |
Type1-subType1-typeA-red-dfsdf1.JPG | red | typeA | subType1 | Type1 |
Type1-subType1-typeA-blue-dfsdf1.JPG | blue | typeA | subType1 | Type1 |
Type1-subType1-typeA-black-2dsfsdf.JPG | black | typeA | subType1 | Type1 |
Type1-subType1-typeA-red-2dsfsdf.JPG | red | typeA | subType1 | Type1 |
Type1-subType1-typeA-blue-2dsfsdf.JPG | blue | typeA | subType1 | Type1 |
Type1-subType1-typeA-black-3asdfdf3.JPG | black | typeA | subType1 | Type1 |
Type1-subType1-typeA-red-3asdfdf3.JPG | red | typeA | subType1 | Type1 |
Type1-subType1-typeA-blue-3asdfdf3.JPG | blue | typeA | subType1 | Type1 |
Type1-subType2-typeB-black-SSS.JPG | black | typeB | subType2 | Type1 |
Type1-subType2-typeB-red-SSS.JPG | red | typeB | subType2 | Type1 |
Type1-subType2-typeB-blue-SSS.JPG | blue | typeB | subType2 | Type1 |
Type1-subType2-typeB-black-AAA.JPG | black | typeB | subType2 | Type1 |
Type1-subType2-typeB-red-AAA.JPG | red | typeB | subType2 | Type1 |
Type1-subType2-typeB-blue-AAA.JPG | blue | typeB | subType2 | Type1 |
Bitte geben Sie mir Tipps, wie ich das gewünschte Ergebnis erzielen kann.
Antwort1
grundsätzlich sollten Sie die Ausgabe von ls nicht analysieren, vorausgesetzt, Sie haben keine „komischen“ Namen (wie Leerzeichen oder Zeilenumbrüche).
Ich würde awk verwenden, um den Dateinamen zu analysieren
ls | awk -F- '{printf "%s,%s,%s,%s,%s,\n",$0,$4,$3,$2,$1}' > file.csv
Wo
-F-
weisen Sie awk an, - als Trennzeichen zu verwenden$0
ganze Linie$4..$1
-te Feld