【发布时间】:2010-03-23 12:20:07
【问题描述】:
我使用的是 Windows,我想使用 Perl、Python、批处理等单行程序从文本文件中提取某些列。
在 Unix 上我可以这样做:
cut -d " " -f 1-3 <my file>
如何在 Windows 上执行此操作?
【问题讨论】:
标签: python perl unix batch-file
我使用的是 Windows,我想使用 Perl、Python、批处理等单行程序从文本文件中提取某些列。
在 Unix 上我可以这样做:
cut -d " " -f 1-3 <my file>
如何在 Windows 上执行此操作?
【问题讨论】:
标签: python perl unix batch-file
这是一个 Perl 单行程序,用于打印文件的前 3 个以空格分隔的列。这可以在 Windows(或 Unix)上运行。参考perlrun。
perl -ane "print qq(@F[0..2]\n)" file.txt
【讨论】:
perl -pane "$_ = qq(@F[0..2])"
您可以下载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 one 班轮
c:\test> type file|python -c "import sys; print [' '.join(i.split()[:3]) for i in sys.stdin.readlines()]"
【讨论】:
这是相当简单的 Python 脚本:
for line in open("my file"):
parts = line.split(" ")
print " ".join(parts[0:3])
【讨论】:
最简单的方法是安装 Cygwin 并使用 Unix cut 命令。
【讨论】:
如果您正在处理一个行很长的文本文件并且您只对前 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 选项将分割一行中的每个空格,这可能会导致大量额外的分割。
【讨论】: