我正在使用Windows,我想使用Perl,Python,批处理等一行提取文本文件中的某些列。
在Unix上,我可以这样做:
cut -d " " -f 1-3 <my file>
如何在Windows上执行此操作?
答案 0 :(得分:10)
这是一个Perl单行程序,用于打印文件的前3个空格分隔列。这可以在Windows(或Unix)上运行。请参阅perlrun。
perl -ane "print qq(@F[0..2]\n)" file.txt
答案 1 :(得分: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()]"
答案 2 :(得分:2)
这是一个相当简单的Python脚本:
for line in open("my file"):
parts = line.split(" ")
print " ".join(parts[0:3])
答案 3 :(得分:1)
最简单的方法是安装Cygwin并使用Unix cut
命令。
答案 4 :(得分: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
选项将在一行中的每个空格上拆分,这可能会导致大量额外拆分。