2017-10-20 18 views
0

J'ai environ 450 fichiers csv dans un dossier avec des noms dans le format (noms d'exemple ci-dessous):Fusionner des fichiers basés sur une partie du nom de fichier

1_a.csv

1_b.csv

1_C .csv

...

1_h.csv

2_a.csv

2_b.csv

...

2_h.csv

...

42_a.csv

...

42_h.csv

Je souhaite combiner tous les fichiers du type "1_xxx.csv" en "1.csv", tous les fichiers du format "2_xxx.csv" en "2.csv" et ainsi de suite.

J'ai essayé d'utiliser cat mais je ne peux fusionner qu'un ensemble de fichiers à la fois. Y at-il un moyen d'exécuter la commande en boucle dans Linux? Toutes les solutions basées sur Python3 sont également les bienvenues.

+2

https://stackoverflow.com/ questions/13613336/python-concatenate-text-files – mnistic

+0

Salut mnistic, merci de l'avoir signalé. Le lien parle cependant simplement de fusionner les fichiers. Ma question concerne le regroupement de 462 fichiers en 42 ensembles de 11 chacun en fonction de la partie initiale de leur nom, puis de leur fusion. –

Répondre

0

Pour une solution python, le commentaire fourni par mnistic est lié à une solution. Si vous voulez une solution bash, vous pouvez utiliser la commande find avec le drapeau exec comme

find . -name "1_*.csv" -exec cat {} >> 1.csv \; 

Cette commande devrait trouver tous les fichiers csv commençant par 1_ puis en les ajoutant au fichier 1.csv.

Pour plus d'informations sur trouver consultez https://ss64.com/bash/find.html

EDIT: Pour une boucle

for i {1..450} 
do 
    find . -name "$i_*.csv" -exec cat {} >> $i.csv \; 
done 

cela devrait fonctionner

Source: http://go2linux.garron.me/bash-for-loop/

+0

Salut Garrigan, merci pour la réponse rapide. Je cherche cependant une solution qui fonctionne en boucle. Avec ce code, j'ai encore besoin de l'exécuter 42 fois pour les fichiers commençant par 1 puis avec 2 et ainsi de suite. Je suis à la recherche d'une solution qui puisse le répéter 42 fois pour chacun des différents types de noms. –

+0

Vous pourriez utiliser une boucle de bash et itérer de 1-> 42 et juste utiliser la variable dans la commande –

+0

Oui Garrigan, exactement ce que je cherche mais certainement quelque chose que je ne sais pas comment écrire un code pour. Pouvez-vous s'il vous plaît ajouter le code de boucle à la solution? –