windows - para - tag rename
Windows equivalente al comando ''cola'' (19)
¿Hay alguna forma de simular el comando * nix tail en la línea de comandos de Windows? Tengo un archivo y quiero una forma de cortar las primeras n líneas de texto. Por ejemplo:
D:/>type file.txt
line one
line two
line three
D:/>*[call to tail]* > result.txt
D:/>type result.txt
line two
line three
Advertencia: utilizar el archivo por lotes para las funciones tokens y delims en el ingreso de texto desconocido puede ser un desastre debido a la interpretación especial de caracteres como &,!, <, Etc. Dichos métodos deben reservarse solo para texto predecible.
Aquí hay un comando de cabeza nativo rápido que le da las primeras 9 líneas en DOS.
findstr /n "." myfile.txt | findstr "^.:"
Los primeros 2 caracteres en cada línea serán el número de línea.
Bueno, esto lo hará , pero es tan rápido como parece (aproximadamente O (n * m), donde n es el número de líneas para mostrar ym es el número total de líneas en el archivo):
for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in (''findstr /n /r "^" filename ^| findstr /r "^%l:"'') do @echo %b
Donde "10" es el número de líneas que desea imprimir, y "nombre de archivo" es el nombre del archivo.
Cuando use más + n que Matt ya mencionó, para evitar pausas en archivos largos, intente esto:
más +1 myfile.txt> con
Cuando redirige el resultado de más, no se detiene, y aquí lo redirecciona a la consola. De manera similar, puede redirigir a otro archivo como este sin las pausas de más si ese es su resultado final deseado. Use> para redirigir al archivo y sobrescribirlo si ya existe, o >> para agregarlo a un archivo existente. (Puede usar cualquiera de los dos para redirigir a con.)
Este es un truco total, pero si se trata de un archivo enorme que solo quiere examinar el formato, encabezado, etc., y está buscando una solución, siempre puede redirigir la salida ''más'' a un nuevo archivo y CTRL-C con rapidez. Las filas de salida no se pueden controlar con precisión y lo más probable es que lo mate en el medio de una línea de salida, pero es una forma económica de capturar un poco de un archivo inutilizable.
Ex.
C:/more test.csv > test.txt
^C
C:/more test.txt
line 1
line 2
etc......
C:/
FWIW, para aquellos que solo necesitan cortar un número indeterminado de registros del encabezado del archivo, más> funciona bien. Esto es útil solo para tener un archivo más pequeño con el que trabajar en las primeras etapas de desarrollo de algo.
Hay un kit de recursos que se puede descargar desde aquí: http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displayLang=en
Contiene una herramienta tail.exe pero solo es compatible con algunas versiones de Windows
(Copiado de esta publicación: comando Tail para Windows )
Hay una herramienta head
gratuita en esta página que puede usar. No lo he intentado.
No creo que haya una forma de salir de la caja. No existe tal comando en DOS y los archivos por lotes están muy limitados para simularlo (sin mayor dolor).
No he intentado extraer un rango, pero pude obtener una línea usando el siguiente comando de DOS:
find /N " " *.log|find "[6]"
Como la mayoría de los archivos contienen espacios, este comando extrae cada línea de todos los archivos de LOG y básicamente los numera comenzando desde 1 para cada archivo. Los resultados numerados se canalizan en el segundo comando FIND
que busca la línea etiquetada como número 6.
Potencia Shell:
Get-Content C:/logs/result.txt -Tail 10
Get-Content C:/logs/result.txt -wait (monitor the tail)
Si desea el comando principal, una manera fácil de obtenerlo es instalar Cygwin. Entonces tendrá todas las herramientas de UNIX a su disposición.
Si esa no es una buena solución, puede intentar usar findstr y hacer una búsqueda para el indicador de fin de línea.
findstr en MSDN: http://technet.microsoft.com/en-us/library/bb490907.aspx
Sin equivalente exacto. Sin embargo, existe un comando nativo de DOS "más" que tiene una opción + n que comenzará a generar el archivo después de la enésima línea:
Indicación de DOS:
C:/>more +2 myfile.txt
El comando anterior generará todo después de las primeras 2 líneas.
Esto es realmente el inverso de la cabeza de Unix:
Consola de Unix:
root@server:~$ head -2 myfile.txt
El comando anterior solo imprimirá las primeras 2 líneas del archivo.
también puedes usar Git bash donde también se emulan la cabeza y la cola
Get-content -Tail n file.txt
con powershell es lo único que se acerca a tail
en Linux.
El Get-Content *filename* | Select-Object -last *n*
Get-Content *filename* | Select-Object -last *n*
sugerido arriba carga / analiza todo. Huelga decir que no estaba contento con mi archivo de registro de 10 GB ... La opción -Tail
comienza al final del archivo.
Si tiene Windows PowerShell instalado (creo que está incluido desde XP), puede ejecutar desde cmd.exe:
Jefe de Comando:
powershell -command "& {Get-Content *filename* -TotalCount *n*}"
Comando de la cola:
powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"
o directamente desde PowerShell:
Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*
actualizar
PowerShell 3.0 (Windows 8 y superior) agregó Tail
comando Tail
con alias Last
. También se agregaron Head
y First
aliases a TotalCount
.
Entonces, los comandos se pueden volver a escribir como
Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*
more /e filename.txt P n
donde n = el número de filas para mostrar. Funciona rápido y es exactamente como el comando principal.
set /p line= < file.csv
echo %line%
devolverá la primera línea de su archivo en cmd Windows en la variable% línea%.