Tomé un libro de archivos de texto sin formato del Proyecto Gutenberg (alrededor de 0,5 MB) que quiero concatenar consigo mismo n
veces para generar un archivo de texto grande en el que pueda comparar algunos algoritmos. ¿Hay algún comando de Linux que pueda usar para lograr esto? cat
Suena ideal, pero no parece jugar demasiado bien con la concatenación de un archivo sobre sí mismo, además no aborda directamente los n
tiempos parte de la pregunta.
linux
concatenation
Bryce Thomas
fuente
fuente
Respuestas:
Dos partes para esto, para mí, primero, usar cat para generar el archivo de texto en la salida estándar, y usar append para agregarlo a otro archivo, por ejemplo foo.txt >> bar.txt agregará foo.txt a bar.txt
luego ejecútalo n veces con
reemplazando n en ese comando con su número
debería funcionar, donde n es tu número
Si usa csh, está el comando 'repetir'.
repito partes relacionadas de la respuesta se copian desde aquí , y lo probé en un sistema ubuntu 11.04 en el shell bash predeterminado.
fuente
{1..12}
correrá correctamente el cuerpo 12 veces.for i in {1..n};do cat foo.txt; done > bar.txt
Estoy aburrido, así que aquí hay algunos métodos más sobre cómo concatenar un archivo consigo mismo, principalmente con
head
una muleta. Disculpe si me explico demasiado, solo me gusta decir cosas: PSuponiendo que
N
es el número de autoconcatenaciones que desea hacer y que su archivo tiene un nombrefile
.Variables:
Dada una copia de
file
llamadofile2
,total_repeats
es el número de vecesfile
que debería agregarsefile2
para que sea igual que sifile
estuviera concatenado a sí mismoN
.Dicho MATH está aquí, más o menos: MATH (esencia)
Es material de informática del primer semestre, pero ha pasado un tiempo desde que hice una prueba de inducción, así que no puedo superarlo ... (también se sabe que esta clase de recursión es así que
2^Loops
también existe ...)POSIX
Utilizo algunas cosas que no son posix pero no son esenciales. Para mis propósitos:
Oh, solo usé eso. Oh bueno, la sección ya está aquí ...
Métodos
head
con seguimiento de recuento de líneas.Sin archivo temporal, sin gato, ni siquiera demasiadas matemáticas, toda alegría.
tee
con MATEMÁTICASAquí
tee
está leyendo,file
pero añadiéndole perpetuamente, por lo que seguirá leyendo el archivo repetidamente hasta que lohead
detenga. Y sabemos cuándo detenerlo debido a MATH . El anexo va por la borda, así que utilicé un archivo temporal. También podría recortar el exceso de líneasfile
.eval
, el señor de la oscuridad!Esto solo se expande
cat file file file ...
y lo evalúa. También puedes hacerlo sin el$tmp
archivo:El segundo
head
"truco"cat
al poner a un intermediario entre este y la operación de escritura. También podrías engañarcat
a otrocat
, pero eso tiene un comportamiento inconsistente. Prueba esto:sed
:Obliga
sed
a leer todo el archivo como una línea, captura todo y luego lo pega$total_repeats
varias veces.Por supuesto, esto fallará si tiene caracteres nulos en su archivo. Elige uno que sabes que no está allí.
Eso es todo por ahora muchachos, espero que esta respuesta arbitraria no moleste a nadie. Los probé muchas veces, pero solo soy un usuario de shell de dos años, así que tenlo en cuenta, supongo. Ahora a dormir...
rm $tmp
fuente
Ciertamente puedes usar
cat
para esto:Para obtener
$n
copias, puede usaryes
canalizado enhead -n $n
:Poner eso juntos da
fuente