9

I'm using Windows, and I would like to extract certain columns from a text file using a Perl, Python, batch etc. one-liner.

On Unix I could do this:

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

How can I do this on Windows?

5 Answers 5

12

Here is a Perl one-liner to print the first 3 whitespace-delimited columns of a file. This can be run on Windows (or Unix). Refer to perlrun.

perl -ane "print qq(@F[0..2]\n)" file.txt
Sign up to request clarification or add additional context in comments.

1 Comment

perl -pane "$_ = qq(@F[0..2])"
3

you can download GNU windows and use your normal cut/awk etc.. Or natively, you can use 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

save the above as mysplit.vbs and on command line

c:\test> cscript //nologo mysplit.vbs file

Or just simple batch

@echo off
for /f "tokens=1,2,3 delims= " %%a in (file) do (echo %%a %%b %%c)

If you want a Python one liner

c:\test> type file|python -c "import sys; print [' '.join(i.split()[:3]) for i in sys.stdin.readlines()]"

Comments

2

That's rather simple Python script:

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

1 Comment

print "\n".join(" ".join(line.split(" ") for line in open("my file")) Ugly one-liner
1

The easiest way to do it would be to install Cygwin and use the Unix cut command.

1 Comment

its even easy to download and install GNU win32 tools than cygwin.
0

If you are dealing with a text file that has very long lines and you are only interested in the first 3 columns, then splitting a fixed number of times yourself will be a lot faster than using the -a option:

perl -ne "@F = split /\s/, $_, 4; print qq(@F[0..2]\n)" file.txt

rather than

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

This is because the -a option will split on every whitespace in a line, which potentially can lead to a lot of extra splitting.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.