「姓、名前」の形式の列を持つタブ区切りファイルがあります。私がしたいのは、レコードを2つの別々の列、、および、last
使用、first
またはcut
他の動詞に分割することです。それ、結果をJSONに出力します。
私はJSONと結婚しておらず、次のような他のツールの使い方を知っていることを付け加える必要があります。jq
しかし、この形式を一度に取得するのが良いでしょう。
この動詞の構文は、nest
率直に思い出せない覚えておくべきオプションがたくさんあるように見えるので、これを行う簡単なDSL作業が必要だと思いました。たぶんそうではないかもしれませんか?
私が試したことは次のとおりです。 (今は余分なスペースがついているということを忘れてしまおう、わかりましたか?後で取り除くためにorまたは何かをFirstname
使います。)strip
ssub
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" ] }
なぜ(error)
?$o
上記のように割り当てると、結果に新しい列が割り当てられるo
ことは意味がありませんかsplitnv
?
私が試した他の方法は次のとおりです。しかし、期待どおりに動作しません。
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
編集する:上記のコマンドの問題は、を使用する必要があることです--tsv
。いいえ -T
--nidx --fs tab
、(数値インデックス列)の同義語です。問題は、この場合、名前付き列を要求すると明らかに間違っていることであり、Millerはバグのある機能である可能性があるエラーメッセージを生成しないことです。問題#233。
どんな洞察力でも大変感謝いたします。
答え1
あなたが求めていることを私が理解したかどうかわかりません。
走れば
echo -e "last_first\nLastName, Firstname" | \
mlr --t2j --jlistwrap --jvstack nest --explode --values --across-fields --nested-fs "," -f last_first \
then clean-whitespace
私は持っています
[
{
"last_first_1": "LastName",
"last_first_2": "Firstname"
}
]
走れば
echo -e "last_first\nLastName, Firstname" | \
mlr --tsv nest --explode --values --across-fields --nested-fs "," -f last_first \
then clean-whitespace
私は持っています
last_first_1 last_first_2
LastName Firstname
答え2
LastName, FirstName
FirstName LastName
DSL式の使用に切り替える方法は次のとおりです。
echo -e "last_first\nLastName, Firstname\nAnotherLast, AnotherFirst" \
| mlr --t2j \
put -q 'o=splitnv($last_first,",");
first_last=strip(o[2]) . " " . o[1];
emit first_last'
# result:
# { "first_last": "Firstname LastName" }
# { "first_last": "AnotherFirst AnotherLast" }
必須(?)らしいと思う部分がemit
以前は理解していなかった中核部分です。
悲しいことに、いいえnest
動詞とすべての必須フラグを使用するよりもはるかに簡単です。