Невозможно использовать --prepipe с miller в Windows 10

Miller - прекрасный инструмент для работы с большими наборами данных. Однако, будучи новичком в этом, я столкнулся с некоторыми проблемами при работе с ним на консоли Windows.

Я работаю в основном с большими .csvфайлы, которые я сжимаю с помощью "Параллельной реализации gzip", двоичные файлы для которых доступны по адресу https://binaries.przemoc.net/

Однако я не могу использовать --prepipe с Миллером в консоли Windows.

Если я использую:

pigz -dcq example.csv.gz

или

pigz -dcq < example.csv.gz

результат в точности такой, как ожидалось, то есть:

id,name
100,alice
200,bob
300,carol
400,david
500,edgar

Использование команды miller для красивой печати с использованием символа вертикальной черты:

pigz -dcq example.csv.gz | mlr --icsv --opprint cat

также дает ожидаемый результат:

id  name
100 alice
200 bob
300 carol
400 david
500 edgar

Но когда я пытаюсь использовать --prepipe

mlr --prepipe 'pigz -dcq' --icsv --opprint cat example.csv.gz

Я получаю следующую ошибку:

mlr: Couldn't popen "pigz -dcq < 'example.csv.gz'" for read.
pigz -dcq < 'example.csv.gz': No such file or directory

Что вызвало эту ошибку?

Я обнаружил, что можно использовать либо отсутствие кавычек, либо двойные кавычки:

pigz -dcq < example.csv.gz
pigz -dcq < "example.csv.gz"

Но использование одинарных кавычек вызывает ошибку:

pigz -dcq < 'example.csv.gz'

С помощью --prepipeприводит к одинарным кавычкам, которые не работают, как показано выше. При использовании одного сжатого файла я, конечно, могу использовать вертикальную черту, но мне нужно использовать несколько сжатых файлов, для которых--prepipeважно, как указано в документации. Как использовать--prepipeв консоли Windows? Любая помощь будет оценена.

Дополнительная информация: я нашел другой случай, когда использование одинарных кавычек вызывает проблемы; использование двойных кавычек - единственный способ получить результат. Пожалуйста, проверьте тестовый файл:

mlr --icsv --opprint cat test.csv
alpha num
a     1
b     2
c     3
d     4
e     5
a     6
b     7
h     8
a     9
j     10

Если я использую filterс символом больше, чем в двойных кавычках, все работает нормально:

mlr --icsv --opprint filter "$num > 5" test.csv
alpha num
a     6
b     7
h     8
a     9
j     10

Но если я использую filterс символом больше чем в одинарных кавычках (как показано в документации), это вызывает ошибку:

mlr --icsv --opprint filter '$num > 5' test.csv
mlr DSL: syntax error at "test"
mlr filter: syntax error on DSL parse of '$num  test.csv'

Причина сбоя в том, что символ "больше" интерпретируется как перенаправление на команду файла. Новый файл с нулевым байтом с именем 5' создается в той же папке, что и test.csv. При использовании одинарных кавычек символ "больше" необходимо экранировать с помощью ^ (символ вставки).

Так что я думаю, может быть, если --prepipeиспользуются двойные кавычки внутри, он должен нормально работать в Windows. Или, может быть, есть какой-то способ побега, который мне еще предстоит открыть.

0 ответов

Другие вопросы по тегам