Миллер: ofs="\n"?

Предположим, у меня есть:

      cat file
"Field 1, Line 1",Field 2,"Field 3, Line 1"
"Field 1, Line 2",Field 2,"Field 3, Line 2"

Вместе с Миллером я хочу произвести:

      "Field 1, Line 1"
"Field 2"
"Field 3, Line 1"
"Field 1, Line 2"
"Field 2"
"Field 3, Line 2"

Я попробовал это:

      mlr --csv -N  --ofs lf --quote-all cat file

Который не производит никакого вывода.

В качестве обходного пути я могу сделать это:

      mlr --csv -N  --ofs pipe --quote-all cat file | sed 's/"\|"/"\n"/g'

Или используйте рубин:

      ruby -r csv -e 'CSV.parse($<.read).flatten.each{|r| puts [r].to_csv(force_quotes: true)}' file

Но кажется, что я должен иметь возможность просто просматривать CSV-файл по одному полю за раз (и игнорировать записи) с помощью Миллера?

2 ответа

Вы можете изменить форму и перечислить:

      mlr --csv --quote-all -N reshape -r ".*" -o a,b  input.csv
"1","Field 1, Line 1"
"2","Field 2"
"3","Field 3, Line 1"
"1","Field 1, Line 2"
"2","Field 2"
"3","Field 3, Line 2"

Затем вырежьте первый столбец (cut -f bсохраняет второй столбец с именемbв этом случае):

      mlr --csv --quote-all -N reshape -r ".*" -o a,b then cut -f b input.csv

получить:

      "Field 1, Line 1"
"Field 2"
"Field 3, Line 1"
"Field 1, Line 2"
"Field 2"
"Field 3, Line 2"

Пока Миллер лечит--ifsи--ofsпо-другому для формата CSV, не выводя никаких сообщений об ошибках с помощью--ofs lfтакое ощущение, что это баг...

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

      mlr -c -N --quote-all filter -q 'for (k,v in $*) {emit {1:v}}'
      "Field 1, Line 1"
"Field 2"
"Field 3, Line 1"
"Field 1, Line 2"
"Field 2"
"Field 3, Line 2"
Другие вопросы по тегам