2010-03-19 16 views
105

Necesito concatenar algunos archivos de texto relativamente grandes, y preferiría hacer esto a través de la línea de comando. Lamentablemente, solo tengo Windows y no puedo instalar un nuevo software.Concatenar archivos de texto con la línea de comandos de Windows, soltando las líneas delanteras

type file1.txt file2.txt > out.txt 

me permite casi consigo lo que quiero, pero no quiero que la primera línea de file2.txt que se incluirán en out.txt.

He notado que more tiene la opción +n para especificar una línea de partida, pero no he podido combinarlas para obtener el resultado que quiero. Soy consciente de que esto puede no ser posible en Windows, y siempre puedo editar out.txt a mano para deshacerme de la línea, pero ¿hay una manera simple de hacerlo desde la línea de comandos?

Respuesta

118
more +2 file2.txt > temp 
type temp file1.txt > out.txt 

o puede usar copy. Ver copy /? para más.

copy /b temp+file1.txt out.txt 
+1

Por supuesto! Sin embargo, hubiera preferido evitar el uso de archivos temporales. Traté de usar paréntesis, tuberías y James

+10

sí, pones '/ b'. ver edición – ghostdog74

+7

. Añadiría que si quiere concatenar TODOS los archivos, puede hacer 'copy/b * .txt combined.txt' sin tener que listar los archivos individualmente. – Phlucious

6

Utilice el comando FOR hacerse eco de un archivo línea por línea, y con el 'saltar' opción de pasar por alto una serie de líneas que comienzan ...

FOR /F "skip=1" %i in (file2.txt) do @echo %i 

Usted puede redirigir la salida de un archivo por lotes, que contiene algo así como ...

FOR /F %%i in (file1.txt) do @echo %%i 
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i 

Tenga en cuenta el doble% cuando se utiliza una variable FOR dentro de un archivo por lotes.

2

Sé que dijo que no podía instalar ningún software, pero no estoy seguro de cuán estrecha es esa restricción. De todos modos, tuve el mismo problema (tratando de concatenar dos archivos con presumiblemente los mismos encabezados) y pensé que podría proporcionar una respuesta alternativa para los demás que llegan a esta página, ya que funcionó muy bien para mí.

Después de probar un montón de comandos en Windows y de estar severamente frustrado, y también probando todo tipo de editores gráficos que prometían poder abrir archivos grandes, pero que luego no pudieron, finalmente volví a mis raíces Linux y abrí mi prompt de Cygwin. Dos comandos:

cp file1.csv out.csv 
tail -n+2 file2.csv >> out.csv 

Para file1.csv 800 MB y 400 MB file2.csv, estos dos comandos tomaron menos de 5 segundos en mi máquina. En un aviso de Cygwin, nada menos. Pensé que se suponía que los comandos de Linux eran lentos en Cygwin, pero ese enfoque requería mucho menos esfuerzo y era mucho más fácil que cualquier otro enfoque de Windows que pudiera encontrar.

55

que usar esto, y funciona bien para mí:

TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv

Por supuesto, antes de cada carrera, hay que DELETE C:\Folder\ConcatenatedFile.csv

El único problema es que si todos los archivos tienen cabeceras, entonces se repetirá en todos los archivos.

+1

Cuando ingreso un nombre de archivo para el archivo concatenado, lo que significa que está en la lista al final de los archivos en la ubicación (orden alfabético), ¡parece que las ventanas se concatenan dos veces! Terminé usando un nombre de archivo de 1filename.csv para no tener el problema. Supongo que la concatenación en una carpeta diferente debería funcionar también ... – SebK

+0

Si usa> en lugar de >>, no es necesario borrar el archivo de antemano. > redirige la salida y crea el archivo nuevo cada vez. >> redirige la salida y agrega. –

+0

¿Cómo se saltea la primera línea en el archivo2, sobre la cual se preguntó OP? –

20

no tengo suficientes puntos de reputación para comentar sobre la recomendación de utilizar *.csv >> ConcatenatedFile.csv, pero puedo añadir una advertencia:

Si crea ConcatenatedFile.csv archivo en el mismo directorio que está utilizando para la concatenación será añadido a sí mismo.

+1

¿Cómo se saltea la primera línea en el archivo2, sobre la cual se preguntó OP? –

2

Pondré esto en un comentario para ghostdog74, excepto que mi representante es muy bajo, así que aquí va.

more +2 file2.txt > temp
Este código en realidad ignorar las filas 1 y 2 del archivo. OP desea mantener todas las filas del primer archivo (para mantener la fila del encabezado) y luego excluir la primera fila (presumiblemente la misma fila del encabezado) en el segundo archivo, por lo que para excluir solo la fila del encabezado OP debería usar more +1.

type temp file1.txt > out.txt

No está claro qué orden los resultados de este código. Es temp anexado a file1.txt (según se desee), o es file1.txt anexado a temp (no deseado ya que la fila del encabezado estaría enterrada en el medio del archivo resultante).

Además, estas operaciones toman un tiempo muy largo con archivos de gran tamaño (por ejemplo, 300 MB)

-2
more +2 file1.txt > type > out.txt && type file2.txt > out.txt 
0

Aquí es cómo hacer esto:

(type file1.txt && more +1 file2.txt) > out.txt 
Cuestiones relacionadas