txt - Concatenar archivos de texto con la línea de comando de Windows, eliminando las líneas principales
batch leer lineas de un archivo (8)
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.
type file1.txt file2.txt > out.txt
me permite casi obtener lo que quiero, pero no quiero que la primera línea de archivo2.txt se incluya en out.txt.
Me he dado cuenta de que more
tiene la opción +n
para especificar una línea de inicio, pero no he logrado combinarlos 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?
He aquí cómo hacer esto:
(type file1.txt && more +1 file2.txt) > out.txt
No tengo suficientes puntos de reputación para comentar sobre la recomendación de usar *.csv >> ConcatenatedFile.csv
, pero puedo agregar una advertencia:
Si crea el archivo ConcatenatedFile.csv
en el mismo directorio que está utilizando para la concatenación, se agregará a sí mismo.
Pondría 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 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 resulta de este código. Se adjunta temp
a file1.txt
(como se desee), o se agrega file1.txt
a temp
(no deseado ya que la fila del encabezado estaría enterrada en el medio del archivo resultante).
Además, estas operaciones tardan mucho tiempo con archivos grandes (por ejemplo, 300 MB)
Sé que dijiste que no podías instalar ningún software, pero no estoy seguro de cuán ajustada 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 de probar todo tipo de editores gráficos que prometían poder abrir archivos grandes, pero luego no pude, finalmente volví a mis raíces de Linux y abrí mi Cygwin. rápido. Dos comandos:
cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv
Para file1.csv
800MB y file2.csv
400MB, esos 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.
Utilice el comando FOR para hacer eco de un archivo línea por línea, y con la opción ''omitir'' para omitir una serie de líneas de partida ...
FOR /F "skip=1" %i in (file2.txt) do @echo %i
Podría redirigir el resultado de un archivo por lotes que contenga 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 una variable FOR se utiliza dentro de un archivo por lotes.
Yo uso esto y funciona bien para mí:
TYPE //Server/Share/Folder/*.csv >> C:/Folder/ConcatenatedFile.csv
Por supuesto, antes de cada ejecución, debe DELETE C:/Folder/ConcatenatedFile.csv
El único problema es que si todos los archivos tienen encabezados, se repetirá en todos los archivos.
more +2 file1.txt > type > out.txt && type file2.txt > out.txt
more +2 file2.txt > temp
type temp file1.txt > out.txt
o puedes usar copy
. Ver copy /?
para más.
copy /b temp+file1.txt out.txt