Prueba esto:
Get-Content test.txt | Foreach {($_ -split '\s+',4)[0..2]}
Y si desea que los datos de esas columnas impresas en la misma línea:
Get-Content test.txt | Foreach {"$(($_ -split '\s+',4)[0..2])"}
en cuenta que esto requiere PowerShell 2.0 para el operador -split
. Además, el ,4
le dice al operador de división la cantidad máxima de cadenas de división que desea, pero tenga en cuenta que la última cadena siempre contendrá todos los parámetros concat'd.
Para las columnas de ancho fijo, aquí es un enfoque para ancho de columna igual a 7 ($ w = 7):
$res = Get-Content test.txt | Foreach {
$i=0;$w=7;$c=0; `
while($i+$w -lt $_.length -and $c++ -lt 2) {
$_.Substring($i,$w);$i=$i+$w-1}}
$ res contendrán cada columna para todas las filas. Para establecer las columnas máximas, cambie $c++ -lt 2
de 2 a otra cosa. Probablemente haya una solución más elegante, pero no tengo tiempo ahora para considerarla. :-)
Gracias, pero esto no parece funcionar. Estoy ejecutando PowerShell 2 e intento extraer las dos primeras columnas de mi archivo .dat de ancho fijo (archivo de texto) – atricapilla
El ejemplo de corte al que se vincula usa un delimitador de espacio y toma las columnas 1 a 3. Si esto no se aplica a su caso, ¿puede decir cuáles son sus requisitos? Suena como el ancho de columna fijo en lugar de delimitado. Si es así, ¿cuál es el ancho de columna? –
Mis datos están en un archivo de texto de ancho fijo (espacios entre). Modifiqué tu código y obtuve esto: Get-Content text.txt | Foreach {"$ ($ _. Split() [0..2])"}. Esto me acerca bastante, pero esto genera breks de filas adicionales entre filas. – atricapilla