Миллер: 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"