J'ai pris un livre de fichiers texte brut du projet Gutenberg (environ 0,5 Mo) que je veux concaténer à lui-même n
fois afin de générer un fichier texte volumineux sur lequel je peux comparer certains algorithmes. Existe-t-il une commande Linux que je peux utiliser pour y parvenir? cat
semble idéal, mais ne semble pas jouer trop bien avec la concaténation d'un fichier sur lui-même, en plus ne répond pas directement à la n
partie fois de la question.
linux
concatenation
Bryce Thomas
la source
la source
Réponses:
Pour moi, deux parties - d'abord - pour utiliser cat pour sortir le fichier texte en sortie standard, et utiliser append pour l'ajouter à un autre fichier - par exemple foo.txt >> bar.txt ajoutera foo.txt à bar.txt
puis exécutez-le n fois avec
remplacer n dans cette commande par votre numéro
devrait fonctionner, où n est votre numéro
Si vous utilisez csh, il y a la commande 'repeat'.
répéter les parties liées de la réponse sont copiées d'ici , et je l'ai testé sur un système ubuntu 11.04 sur le shell bash par défaut.
la source
{1..12}
exécutera correctement le corps 12 fois.for i in {1..n};do cat foo.txt; done > bar.txt
Je m'ennuie donc voici quelques méthodes supplémentaires pour concaténer un fichier à lui-même, principalement avec
head
une béquille. Pardonnez-moi si je me surexplique, j'aime juste dire des choses: PEn supposant que
N
le nombre d'auto-concaténations que vous voulez faire et que votre fichier est nomméfile
.Variables:
Étant donné une copie de
file
appeléfile2
,total_repeats
c'est le nombre de foisfile
qu'il faudrait ajouter pourfile2
le rendre comme s'ilfile
était concaténé à lui-mêmeN
fois.Dit MATH est ici, plus ou moins: MATH (gist)
C'est des trucs informatiques du premier semestre mais ça fait un moment que je n'ai pas fait de preuve d'induction donc je ne peux pas m'en remettre
2^Loops
...POSIX
J'utilise quelques éléments non posix mais ils ne sont pas essentiels. Pour mes fins:
Oh, je l'ai seulement utilisé. Eh bien, la section est déjà là ...
Les méthodes
head
avec suivi linecount.Pas de fichier temporaire, pas de chat, pas encore trop de maths, toute joie.
tee
avec MATHVoici la
tee
lecturefile
mais en y ajoutant perpétuellement, donc il continuera à lire le fichier en boucle jusqu'à cehead
qu'il s'arrête. Et nous savons quand l'arrêter à cause de MATH . L'ajout passe par dessus bord, j'ai donc utilisé un fichier temporaire. Vous pouvez également couper les lignes en excèsfile
.eval
, le seigneur des ténèbres!Cela se développe
cat file file file ...
et l'évale. Vous pouvez aussi le faire sans le$tmp
fichier:La seconde
head
"astuces"cat
en mettant un intermédiaire entre elle et l'opération d'écriture. Vous pouvez également trompercat
avec un autrecat
, mais cela a un comportement incohérent. Essaye ça:sed
:Force la
sed
lecture de l'ensemble du fichier sous forme de ligne, capture l'intégralité de celui-ci, puis le colle$total_repeats
plusieurs fois.Cela échouera bien sûr si vous avez des caractères nuls dans votre fichier. Choisissez celui dont vous savez qu'il n'est pas là.
C'est tout pour l'instant les gars, j'espère que cette réponse arbitraire n'a dérangé personne. Je les ai tous testés plusieurs fois, mais je ne suis qu'un utilisateur shell de deux ans, alors gardez cela à l'esprit, je suppose. Maintenant pour dormir ...
rm $tmp
la source
Vous pouvez certainement utiliser
cat
pour cela:Pour obtenir des
$n
copies, vous pouvez utiliser desyes
canalisations danshead -n $n
:Mettre cela ensemble donne
la source