2010-03-23 27 views

回答

10

這是一個Perl單線程打印文件的前3個以空格分隔的列。這可以在Windows(或Unix)上運行。請參閱perlrun

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

謝謝,這正是我所需要的! – atricapilla 2010-03-23 12:57:29

+2

'perl -pane「$ _ = qq(@F [0..2])」' – 2010-03-23 14:47:33

+1

'perl -pane'$ _ =「@ F [0 .. 2]「''' – 2010-03-24 00:44:39

2

這是相當簡單的Python腳本:

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

這可以按照Python的要求完成嗎?當然,@toolic, – toolic 2010-03-23 12:43:23

+1

。但它不會像「優雅」那樣「優雅」,因爲Python並不意味着要做一件襯衫。它的意思是生成可讀代碼。 – ghostdog74 2010-03-23 12:57:54

+0

打印「\ n」.join(「」.join(line.split(「」)用於打開(「我的文件」)中的行) 醜陋的單線程 – 2010-03-23 13:12:21

1

做這將是安裝Cygwin和使用Unix cut命令的最簡單方法。

+0

它甚至可以輕鬆下載和安裝GNU win32工具cygwin。 – ghostdog74 2010-03-23 12:58:31

3

你可以下載GNU windows和使用普通剪切/ AWK等。 或者本身,您可以使用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 

上述保存爲mysplit.vbs和命令行

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

或者只是簡單的批次

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

如果你想要一個Python一個襯墊

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

如果您正在處理有很長行的文本文件,你只在第3列感興趣,那麼分裂的固定次數自己會比使用-a選項快很多:

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

而不是

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

這是因爲-a選項將在每行中的空白處分割,這可能會導致大量額外的分割。