2010-03-23 7 views

Respuesta

10

Aquí hay un trazador de líneas Perl para imprimir las primeras 3 columnas delimitadas por espacios en blanco de un archivo. Esto se puede ejecutar en Windows (o Unix). Consulte perlrun.

perl -ane "print qq(@F[0..2]\n)" file.txt 
+1

¡Gracias, esto era exactamente lo que necesitaba! – atricapilla

+2

'perl -pane" $ _ = qq (@F [0..2]) "' –

+1

'perl -pane '$ _ =" @ F [0 .. 2] "'' –

2

Eso es bastante simple script en Python:

for line in open("my file"): 
    parts = line.split(" ") 
    print " ".join(parts[0:3]) 
+0

¿Se puede hacer esto como una línea de Python, como se solicita? – toolic

+1

@toolic, por supuesto. Pero no será tan "elegante" ya que Python "no tiene la intención" de hacer una sola línea. Su objetivo es producir código legible. – ghostdog74

+0

print "\ n" .join ("" .join (line.split ("") para la línea en abierto ("mi archivo")) Ugly one-liner –

1

La forma más sencilla de hacerlo sería instalar Cygwin y utilizar el comando Unix cut.

+0

es incluso más fácil descargar e instalar las herramientas win32 de GNU que cygwin. – ghostdog74

3

se puede descargar y usar su GNU windows normal de corte/awk etc .. O forma nativa, puede utilizar VBScript

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objArgs = WScript.Arguments 
strFile = objArgs(0) 
Set objFile = objFS.OpenTextFile(strFile) 
Do Until objFile.AtEndOfLine 
    strLine=objFile.ReadLine 
    sp = Split(strLine," ") 
    s="" 
    For i=0 To 2 
     s=s&" "&sp(i)  
    Next 
    WScript.Echo s 
Loop 

salvar lo anterior como mysplit.vbs y en la línea de comandos

c:\test> cscript //nologo mysplit.vbs file 

O simplemente lotes sencillo

@echo off 
for /f "tokens=1,2,3 delims= " %%a in (file) do (echo %%a %%b %%c) 

Si quieres un pitón un trazador de líneas

c:\test> type file|python -c "import sys; print [' '.join(i.split()[:3]) for i in sys.stdin.readlines()]" 
0

Si se trata de un archivo de texto que tiene líneas muy largas y que sólo está interesado en las 3 primeras columnas, a continuación, la división de un número fijo de veces que usted mismo se ser mucho más rápido que usar la opción -a:

perl -ne "@F = split /\s/, $_, 4; print qq(@F[0..2]\n)" file.txt

en lugar de

perl -ane "print qq(@F[0..2]\n)" file.txt

Esto se debe a que la opción -a se dividirá en cada espacio en blanco en una línea, lo que puede provocar una gran cantidad de divisiones adicionales.

Cuestiones relacionadas