Eu tenho uma estrutura de pastas como: -
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
Em cada pasta de cor há algumas imagens assim :-(e muitas mais)
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
Quero ler cada imagem e salvá-la em um arquivo CSV individual. Portanto, o formato do arquivo csv será:
Para estrutura de pastas 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 |
Para estrutura de pastas 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
E assim por diante para outras pastas também. Como posso obter o resultado desejado?
Nota: O nome da imagem reflete a estrutura da pasta.
Até agora, li todas as imagens de pastas diferentes em um único arquivo csv. Aqui está minha saída:
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 |
Por favor, sugira como posso alcançar o resultado desejado.
Responder1
como regra, você não deve analisar a saída de ls, supondo que não tenha nomes 'engraçados' (como espaço ou quebra de linha).
Eu usaria o awk para analisar o nome do arquivo
ls | awk -F- '{printf "%s,%s,%s,%s,%s,\n",$0,$4,$3,$2,$1}' > file.csv
onde
-F-
diga ao awk para usar - como separador$0
linha inteira$4..$1
-º campo