J'essaie, à l'aide de bash, pour fusionner le contenu d'une liste de fichiers (plus de 1k) dans un gros fichier.
J'ai essayé la commande CAT suivante: P>
content1 content2 content3 content4
6 Réponses :
Le problème est que vous mettez devrait simplement fonctionner comme vous le souhaitez, avec vos fichiers bigfile code> dans le même répertoire, ce qui fait donc partie de
* code>. Donc, quelque chose comme
filen.txt code> dans
dir / code> p> p> P> p>
... ou chat *> / tmp / bigfile; MV / TMP / BIGFILE. CODE>.
Je pense que Fabioln incluait intentionnellement bigfile.txt code> dans l'entrée; Il veut ajouter au fichier à partir des différents fichier
* .txt code>, mais éliminer les doublons en même temps.
Merci les gars. Oui, c'était le problème! Je mets le bigfile dans le même dir ... alors j'ai utilisé la commande que vous m'avez donnée (Cat Dir / *> Bigfile)! Une autre question: pourquoi vous mettez juste> au lieu de >> Est-ce la même chose? Merci!
@ Fabioln79 en utilisant >> code> Vous appendez la sortie dans le fichier, à l'aide de
> code> vous écrasez tout le contenu.
Peut-on toujours compter sur la "notation étoile" pour fusionner les fichiers dans le bon ordre?
Dépend de votre ordre "droit"; La coquille va développer * code> dans ordre alphabétique, voir serverfault.com/a/122743
Essayez:
cat `ls -1 *` >> bigfile.txt
-1 Cela ne résout rien et introduit de nouveaux problèmes. N'utilisez pas ls code> lorsque le Wildcard se développe déjà aux fichiers que vous voulez! N'utilisez pas les noms de fichiers non coqués (la sortie des backtsticks) car il se casse si les noms de fichier contiennent des espaces.
J'y pensais réellement à une boucle quand j'ai écrit ça, mais cela ne sortait pas de ma tête correctement. J'aime mieux la réponse de Barton.
Lors de la ré-lecture de votre question, il semble que vous souhaitiez ajouter des données sur EDIT: En supposant que BigFile.txt est trié, vous pouvez essayer un deux Processus de contournement: p> Nous triez d'abord les fichiers d'entrée, en supprimant les doublons. Nous conduisons cette sortie à un autre processus bigfile.txt code>, mais
sans ajouter des doublons. Vous devrez tout transduire par
trier -u code> pour filtrer les doublons:
-O code> -o code> option pour trier vous permet de définir Inclure en toute sécurité le contenu de
bigfile.txt code> dans l'entrée pour trier avant que le fichier soit écrasé avec la sortie. P>
trier -u code>, celui-ci à l'aide de l'option
-M code>, qui indique
Trier code> pour fusionner deux fichiers triés précédemment . Les deux fichiers que nous allons fusionnerons sont
- code> (entrée standard, le flux provenant du premier
Trier code>) et
bigfile.txt code> lui-même. Nous utilisons à nouveau l'option
-o code> pour nous permettre d'écrire la sortie sur
bigfile.txt code> après l'avoir lu comme entrée. p> p>
J'ai modifié la réponse pour permettre aux nouvelles données d'être fusionnées dans bigfile.txt code> de manière à ce qu'il reste trié sans doublons introduits. Je pense que c'est le meilleur que vous puissiez faire sans passer à un format plus structuré (tel qu'une base de données).
Vous pouvez conserver le fichier de sortie dans le même répertoire, il vous suffit d'être un peu plus sophistiqué que * code>:
Merci. J'ai une question liée à cette commande: le répertoire contenant le fichier a une taille de 557GB mais le grandfile créé a une taille de 495. Je ne sais pas comment expliquer cela. Je fais quelque chose de mal? Merci!
@ Fabioln79 avec quantité d'informations fournies, suspect ceci peut être dû à l'espace effectivement utilisé la taille du bloc (lisez sur ce dernier)
L'autre moyen serait CAT File1.txt File2.txt ... et ainsi de suite ... mais je ne peux pas le faire pour plus de 1k fichiers! p>
C'est ce que Xargs est pour: p>
xxx pré> blockQuote>
Xargs exécute-t-il la commande pour chaque argument i>? Si oui, devriez-vous utiliser '>>' au lieu de ">"? Je pense que lorsqu'il est fait, BigFile.txt ne contiendra que le contenu du dernier fichier qui lui est transmis.
Xargs exécute la commande une fois pour tous les arguments, vous n'avez pas besoin d'utiliser '>>' code>.
Merci pour la clarification. La page de l'homme n'était pas très claire pour moi dessus.
C'est une question ancienne mais je vais toujours donner une autre approche avec répertoriez les fichiers que vous souhaitez concatez p>
ls | Grep [modèle]> Fileéliste P>
blockQuote> li>
revue vos fichiers sont dans la commande appropriée avec Créer le fichier final p>
Fileéliste CAT | Xargs Cat >> [Fichier final] P>
blockQuote> li>
Retirez le filéliste p>
Filoconiste RM -F P>
blockQuote> li>
ol>
J'espère que cela aide toute personne p> xargs code> p>
VI code> ou
chat code>. Si vous utilisez un suffixe (1, 2, 3, ..., n) cela ne devrait pas être un problème p> li>