У меня такая структура папок:-
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
В каждой папке цветов есть несколько изображений, например, это :-(и много других)
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
Я хочу прочитать каждое изображение и сохранить в отдельный файл csv. Поэтому формат файла csv будет:
Для структуры папок 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 |
Для структуры папок 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
И так далее для других папок. Как мне получить желаемый результат?
Примечание: название изображения отражает структуру папок.
До сих пор я считал все изображения из разных папок в один файл 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 |
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 |
Пожалуйста, посоветуйте, как мне достичь желаемого результата.
решение1
Как правило, вам не следует анализировать вывод ls, однако при условии, что у вас нет «смешных» имен (вроде пробела или переноса строки).
Я бы использовал awk для разбора имени файла
ls | awk -F- '{printf "%s,%s,%s,%s,%s,\n",$0,$4,$3,$2,$1}' > file.csv
где
-F-
указать awk использовать - в качестве разделителя$0
вся линия$4..$1
-ое поле