Mesclar CSVs com gato ou outros métodos

1

Eu tenho CSVs de diretórios diferentes que têm o mesmo nome de arquivo e gostaria de mesclá-los e colocá-los em um novo diretório com o mesmo nome de arquivo, e depois passá-lo pelas pastas de origem.

Os CSVs têm a mesma estrutura de ambas as fontes.

Eu tenho procurado por uma boa solução para isso por um tempo e minhas habilidades de unix / bash não são tão perfeitas para essa tarefa quanto eu quero que elas sejam.

**Example**
    Source1/1.csv
    Source2/1.csv
    Output/1.csv
    
por F.Dahlberg 15.09.2016 / 11:55

1 resposta

3

Normalmente, um arquivo CSV parece assim:

file1.csv :

a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3

Agora, se tivermos um segundo arquivo CSV com formato e dimensões compatíveis (mesmo delimitador de coluna, aqui , - e mesmo número de colunas, aqui 5) e sem uma linha de título contendo títulos para cada coluna, como no exemplo abaixo :

file2.csv :

a4,b4,c4,d4,e4
a5,b5,c5,d5,e5

Então, podemos concatenar os dois arquivos sem necessidade de conversão:

cat file1.csv file2.csv > output.csv

O resultado seria este:

output.csv :

a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5

Para mesclar automaticamente todos os arquivos em source1/ com arquivos com nomes iguais em source2/ (supondo que haja apenas arquivos CSV e todos os arquivos em source1/ também devem existir em source2/ ), armazenar o resultado em output/ com o mesmo nome de arquivo, o seguinte one-liner da Bash fará o trabalho:

for f in source1/* ; do fname="$(basename -- "$f")" ; cat -- "source1/$fname" "source2/$fname" > "output/$fname" ; done
    
por Byte Commander 15.09.2016 / 12:29