Extraindo * .csv de centenas de zips e anexando resultados

0

O que seria uma maneira eficiente de extrair apenas todos os arquivos * .csv (não outros arquivos dentro) de dentro de cem arquivos zip em um único diretório? Então eu preciso fazer um grande arquivo com cada arquivo CVS anexado, embora retirando a linha de cabeçalho 1 dos arquivos 2, ..., n.

Se funcionar bem, eu gostaria de usar o 7za.exe do 7-Zip na versão de linha de comando ou outras soluções autônomas que não exigem instalação em uma plataforma WinXP. Os zips contêm outros dados que não são necessários.

O acréscimo simples é fácil com o arquivo1 + arquivo2 + ..., mas que tal descartar o cabeçalho?

    
por ExcelCyclist 02.01.2010 / 23:04

3 respostas

2

Na verdade, para pular o cabeçalho no Unix / Linux, você precisaria do comando 'tail'.

Você pode dizer ao comando 'tail' para pular a primeira linha (o cabeçalho) fazendo o seguinte:

tail -n+2 filename

Isso vai dizer a cauda para começar a ler a partir da linha 2.

Para fazer isso em todos os arquivos .csv em seu diretório atual e anexá-los juntos, coloque o seguinte em um script:

#!/bin/bash

for file in *.csv
do
tail -n+2 $file
done

Você pode então executar este script como ./script.sh>output e a saída estará no arquivo chamado 'output'.

Infelizmente, não sei se algo como o tail está disponível em qualquer capacidade no Windows sem portas.

    
por 03.01.2010 / 00:53
0

but how about dropping the header?

Com o comando unix 'head' (do mingw, opench ou um monte de outros utils) você pode usar "head -n" para mostrar todas as primeiras linhas 'n'

    
por 02.01.2010 / 23:46
0

Para minha vergonha, a resposta para extrair apenas um tipo de arquivo específico de todos os arquivos compactados em um diretório com 7Zip é simplesmente:

7za.exe e *.zip *.csv

Em seguida, para combinar os arquivos com um arquivo em lote (embora seja decepcionante, essa única linha não pode ser digitada no prompt de comando)

[saved as foo.bat for example]
for %%X in (*.csv) do tail -n+2 %%X >> combined.csv
    
por 03.01.2010 / 17:15