我正在使用Windows,並且我想要使用Perl,Python,批處理等一行內容從文本文件中提取某些列。使用Perl單行提取文本文件中的列:類似於Unix剪切
在Unix上我可以這樣做:
cut -d " " -f 1-3 <my file>
我怎樣才能做到這一點在Windows?
我正在使用Windows,並且我想要使用Perl,Python,批處理等一行內容從文本文件中提取某些列。使用Perl單行提取文本文件中的列:類似於Unix剪切
在Unix上我可以這樣做:
cut -d " " -f 1-3 <my file>
我怎樣才能做到這一點在Windows?
這是一個Perl單線程打印文件的前3個以空格分隔的列。這可以在Windows(或Unix)上運行。請參閱perlrun。
perl -ane "print qq(@F[0..2]\n)" file.txt
這是相當簡單的Python腳本:
for line in open("my file"):
parts = line.split(" ")
print " ".join(parts[0:3])
這可以按照Python的要求完成嗎?當然,@toolic, – toolic 2010-03-23 12:43:23
。但它不會像「優雅」那樣「優雅」,因爲Python並不意味着要做一件襯衫。它的意思是生成可讀代碼。 – ghostdog74 2010-03-23 12:57:54
打印「\ n」.join(「」.join(line.split(「」)用於打開(「我的文件」)中的行) 醜陋的單線程 – 2010-03-23 13:12:21
你可以下載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()]"
如果您正在處理有很長行的文本文件,你只在第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
選項將在每行中的空白處分割,這可能會導致大量額外的分割。
謝謝,這正是我所需要的! – atricapilla 2010-03-23 12:57:29
'perl -pane「$ _ = qq(@F [0..2])」' – 2010-03-23 14:47:33
'perl -pane'$ _ =「@ F [0 .. 2]「''' – 2010-03-24 00:44:39