Como combinar todos os CSV 'S para um CSV em um pedido

1

Eu tenho um monte de csv na pasta. Quero combiná-los em um pedido.

Eu tenho os arquivos csv como

state_1_result_6.csv,
state_1_result_8.csv,
state_1_result_10.csv,
state_1_result_12.csv.....

Cada um dos csv tem uma linha sem cabeçalho, então o conteúdo de um state_i_result.csv será como:

1,2,3,69,19,1,2,6,10,12,30,28

Eu quero combinar em tal ordem que a primeira linha será state_1_result_6.csv e a segunda linha será state_1_result_8.csv e assim por diante.

Eu tentei com

cat state*.csv > final.csv

Mas não está se fundindo em um pedido.

    
por John 04.01.2017 / 09:44

3 respostas

1

Como você os conhece, faça um loop pela lista de índices:

for i in 6 8 10 12;
do
   cat state_1_result_${i}.csv >> final.csv
done

Você também pode usar um loop C:

for ((i=6; i<=12; i+=2))
    
por 04.01.2017 / 10:26
0

É bom ver que os índices estão logo antes da extensão do arquivo.

cat state*.csv > final.csv

considera a classificação por caracteres ascii. Ou seja, {6, 8, 10, 12} na classificação torna-se {10, 12, 6, 8}.

Na página de manual de ls , existe uma opção -v, que classifica de acordo com o número da versão, que é o que é necessário. Portanto, você pode usar

cat 'ls -v | grep .csv' > final.csv

se esses forem os únicos arquivos csv no diretório.

    
por 04.01.2017 / 10:20
0

ou mais simplesmente

ls -v *.csv | xargs cat >> final.csv

-v por número de versão

    
por 04.01.2017 / 10:50

Tags