Перевести awk-фильтрацию в эквивалент командной строки Windows - PullRequest
3 голосов
/ 12 марта 2019

Мне нужна помощь с очень конкретным вопросом.Мне нужно заменить следующую UNIX-строку на Windows-эквивалент без установки стороннего программного обеспечения.

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

Что делает строка:

Сканирует myInputFile.csv, где столбецэто разделитель ; для текста 2019-03-11 в 6-м столбце, который добавляет строку к myOutputFile.csv

К сожалению, я не могу установить gawk или что-либо подобное на компьютере клиента.

Я много лет не пользовался машиной с окнами и совершенно потерян.: - (

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

Я полагаю, что вам нужно следующее в Powershell:

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

Я не подожгу руки за исход этого.

Если вы хотите вызвать это из bat-файла, вам нужно выполнить ugly-ness .

1 голос
/ 12 марта 2019

findstr.exe имеет довольно ограниченные возможности RegEx, но этого должно быть достаточно:

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

Другой простой способ cmdline (при условии, что - это не менее 7 столбцов):

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)

В пакетном файле вам придется удвоить все знаки процента.

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