2012-07-06 11 views
8

Estoy tratando de ejecutar el siguiente comando en un archivo de texto muy grande. Sin embargo, es muy lentoseleccionar -primero 1 en un archivo grande

((cat largefile.txt | select -first 1).split(",")).count() 

¿Es una forma alternativa rápida en Powershell? Parece que el comando escaneará todo el archivo pase lo que pase.

Respuesta

12

sólo para obtener el primer número x de líneas en un archivo de texto, utilice el - parámetro de totalcount:

((Get-Content largefile.txt -totalcount 1).split(",")).count 
+0

Este método carga todo el archivo en la memoria primero, antes de tomar la primera línea. – Ten98

9

Es peor que eso: cargará todo el archivo y lo convertirá en una matriz de cadenas.

usar las bibliotecas nativas de .NET para cargar sólo la primera línea:

$reader = [System.IO.File]::OpenText("largefile.txt") 
$line = $reader.ReadLine() 
$reader.Close() 

(tomado de How to process a file in Powershell line-by-line as a stream)

+0

¿Qué pasa con las últimas líneas o solo tiene que esperar a que llegue hasta el final? – Coops

+0

Este método solo carga la primera línea en la memoria, por lo que es mucho más rápido que Get-Content en archivos más grandes. – Ten98

Cuestiones relacionadas