【问题标题】:Extracting columns from text file using Perl one-liner: similar to Unix cut使用 Perl 单行从文本文件中提取列:类似于 Unix cut
【发布时间】:2010-03-23 12:20:07
【问题描述】:

我使用的是 Windows,我想使用 Perl、Python、批处理等单行程序从文本文件中提取某些列。

在 Unix 上我可以这样做:

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

如何在 Windows 上执行此操作?

【问题讨论】:

    标签: python perl unix batch-file


    【解决方案1】:

    这是一个 Perl 单行程序,用于打印文件的前 3 个以空格分隔的列。这可以在 Windows(或 Unix)上运行。参考perlrun

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

    【讨论】:

    • perl -pane "$_ = qq(@F[0..2])"
    【解决方案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()]"
    

    【讨论】:

      【解决方案3】:

      这是相当简单的 Python 脚本:

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

      【讨论】:

      • print "\n".join(" ".join(line.split(" ") for line in open("my file")) 丑陋的单行
      【解决方案4】:

      最简单的方法是安装 Cygwin 并使用 Unix cut 命令。

      【讨论】:

      • 它比 cygwin 更容易下载和安装 GNU win32 工具。
      【解决方案5】:

      如果您正在处理一个行很长的文本文件并且您只对前 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 选项将分割一行中的每个空格,这可能会导致大量额外的分割。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        • 2011-01-30
        相关资源
        最近更新 更多