Извлечение столбцов из текстового файла с использованием однострочного Perl: аналогично Unix cut - PullRequest
9 голосов
/ 23 марта 2010

Я использую Windows, и я хотел бы извлечь определенные столбцы из текстового файла, используя Perl, Python, пакетную и т. Д. Одну строку.

В Unix я мог бы сделать это:

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

Как я могу сделать это в Windows?

Ответы [ 5 ]

10 голосов
/ 23 марта 2010

Вот Perl с одной строкой для печати первых 3 разделенных пробелами столбцов файла.Это может быть запущено в Windows (или Unix).См. perlrun .

perl -ane "print qq(@F[0..2]\n)" file.txt
3 голосов
/ 23 марта 2010

вы можете скачать 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()]"
2 голосов
/ 23 марта 2010

Это довольно простой скрипт на Python:

for line in open("my file"):
    parts = line.split(" ")
    print " ".join(parts[0:3])
1 голос
/ 23 марта 2010

Самый простой способ сделать это - установить Cygwin и использовать команду Unix cut.

0 голосов
/ 28 января 2015

Если вы имеете дело с текстовым файлом с очень длинными строками и вас интересуют только первые 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 будет разбивать каждый пробел в строке, что потенциально может привести к дополнительному расщеплению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...