Eu tenho um arquivo delimitado por tabulação onde uma das colunas está no formato "LastName, FirstName". O que eu quero fazer é dividir esse registro em duas colunas separadas, last
, and first
, use cut
ou algum outro verbo(s) nesse , e gerar o resultado em JSON.
Devo acrescentar que não sou casado com JSON e sei usar outras ferramentas como jq
, mas seria bom obtê-lo nesse formato em uma etapa.
A sintaxe do nest
verbo parece exigir a memorização de muitas opções francamente não memoráveis, então imaginei que haveria uma operação DSL simples para fazer esse trabalho. Talvez não seja o caso?
Aqui está o que eu tentei. (Vamos esquecer o espaço extra que está anexado Firstname
agora, OK? Eu usaria strip
ou ssub
algo para me livrar disso mais tarde.)
echo -e "last_first\nLastName, Firstname" \
| mlr --t2j put '$o=splitnv($last_first,",")'
# result:
# { "last_first": "LastName, Firstname", "o": "(error)" }
# expected something like:
# { "last_first": "LastName, Firstname", "o": { 1: "LastName", 2: "Firstname" } }
#
# or:
# { "last_first": "LastName, Firstname", "o": [ "LastName", "Firstname" ] }
Por quê (error)
? Não é razoável que atribuir $o
como acima atribuiria uma nova coluna o
ao resultado de splitnv
?
Aqui está outra coisa que tentei que não funcionou como eu esperava:
echo -e "last_first\nLastName, Firstname" \
| mlr -T nest --explode --values --across-fields --nested-fs , -f last_first
# result (no delimiter here, just one field, confirmed w/ 'cat -A')
# last_first
# LastName, Firstname
# expected:
# last_first_1<tab>last_first_2
# LastName,<tab> Firstname
Edit : O problema com o comando acima é que eu deveria ter usado --tsv
, não -T
, que é sinônimo de --nidx --fs tab
(colunas indexadas numericamente). O problema é que o Miller não produz uma mensagem de erro quando é obviamente errado pedir colunas nomeadas nesse caso, o que pode ser um recurso incorreto; veja a edição #233 .
Qualquer insight seria apreciado.
Não sei se entendi seu pedido.
Se eu correr
Eu tenho
E se eu correr
Eu tenho
Veja como mudar
LastName, FirstName
paraFirstName LastName
usar expressões DSL:Eu acho que o fato de que
emit
parece ser necessário (?) foi a parte principal que eu não entendia antes.Infelizmente, não é muito mais fácil do que usar o
nest
verbo e todos os seus sinalizadores necessários.