Peter Kerschbaumer
Peter Kerschbaumer

Reputation: 31

Translate awk filtering to a windows command-line equivalent

I need help with a very specific question. I need to replace the following UNIX-line to a windows equivalent without installation of third-party software.

awk -F ";" '$6 ~/2019-03-11/ {print}' myInputFile.csv >> myOutputFile.csv

What the line does:

It scans myInputFile.csv, where the column delimiter is a ;, for the text 2019-03-11 in the 6th column and appends the line to myOutputFile.csv

Unfortunately, I cannot install gawk or anything like it on the client's machine.

I haven't used a windows machine for many years and am totally lost. :-(

Upvotes: 3

Views: 1604

Answers (2)

kvantour
kvantour

Reputation: 26531

I believe what you are after is the following in Powershell:

$ Get-Content .\myInputFile.csv | %{ if ($_.Split(';')[5] -match "2019-03-11") { $_; } } >> .\myOutputFile.csv

I will not put my hands in fire for the outcome of this.

If you want to call this from a bat-file, you have to do some ugly-ness.

Upvotes: 2

user6811411
user6811411

Reputation:

findstr.exe has rather limited RegEx capabilities, but this should be sufficient:

findstr "^[^;][^;]*;[^;][^;]*;[^;][^;]*;[^;][^;]*;[^;][^;]*;2019-03-11" <myInputFile.csv >>myOutputFile.csv

Another pure cmdline way (provided there are at least 7 columns):

For /F "tokens=1-6* delims=;" %A in ('findstr "2019-03-11" ^<myInputFile.csv') do @if "%F"=="2019-03-11" (>>myOutputFile.csv Echo %A;%B;%C;%D;%E;%F;%G)

In a batch file you'll have to double all percent signs.

Upvotes: 1

Related Questions