Como posso criar um arquivo CSV a partir de uma listagem de diretórios com várias colunas com base nos nomes dos arquivos?

1

Eu tenho uma lista de arquivos de imagem, que são varreduras de recibos. Eles se parecem com isso:

gas_20160710_3432.jpg
gas_20160810_242.jpg
water_20161004_4510.jpg

Eu gostaria de poder pegar a lista de arquivos e transformá-la em um arquivo CSV, o que eu posso fazer com o comando 'ls' > files.csv .

No entanto, tomei o cuidado de fazer com que os nomes dos arquivos contenham pouca informação sobre o conteúdo, e gostaria de analisar os nomes dos arquivos para que eu possa trabalhar mais facilmente com os dados ao editar o arquivo CSV no LibreOffice Calc.

Cada nome de arquivo tem o tipo de recibo, a data no formato YYYYMMDD e, em seguida, um montante em dinheiro que é gravado no recibo. Então, gostaria de separar essas informações em colunas diferentes, assim como ter uma coluna com o nome completo do arquivo. Então, o resultado final deve ser assim:

Existe também outro problema. A data precisa ser convertida de AAAAMMDD para AAAA-MM-DD. Sem os traços, o LibreOffice Calc parece ficar confuso.

Existe uma maneira de criar o arquivo CSV que eu quero do conteúdo do diretório a partir da linha de comando?

Observe que não há outros arquivos no diretório além das digitalizações de recebimento, portanto, não é necessário filtrar os tipos de arquivos ou excluir arquivos com nomes formatados de forma diferente.

    
por Questioner 26.01.2017 / 07:08

1 resposta

2

Usando o perl:

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

Em perl, (...) é usado para agrupar texto correspondente, então (.) é um grupo com um único caractere, (.*) é um grupo com uma string arbitrária, (\d{2}) é um grupo com dois dígitos ( \d é um dígito e {2} indica dois dos anteriores) e assim por diante. \u converte o próximo átomo em maiúsculo. , , ... são os vários grupos em ordem. $& contém todo o texto correspondente.

Saída:

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

Você pode adicionar os cabeçalhos de forma independente.

    
por muru 26.01.2017 / 07:15