使用Perl一行代码从文本文件中提取列:类似于Unix cut

9 投票
5 回答
10203 浏览
提问于 2025-04-15 20:44

我在用Windows系统,想用Perl、Python、批处理等简单的一行代码,从一个文本文件中提取某些列。

在Unix系统上我可以这样做:

cut -d " " -f 1-3 <my file>

那我在Windows上该怎么做呢?

5 个回答

2

这是一段相当简单的Python脚本:

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

你可以去下载 GNU windows,这样就可以用你平常用的 cut、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()]"
12

这里有一行Perl代码,可以用来打印文件中前3列用空格分隔的数据。这段代码可以在Windows或Unix系统上运行。详细信息可以参考perlrun

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

撰写回答