我怎样才能(无痛地)在米勒的唱片中分割或反转“最后,第一”?

我怎样才能(无痛地)在米勒的唱片中分割或反转“最后,第一”?

我有一个制表符分隔的文件,其中一列的格式为“姓氏,名字”。我想要做的是将记录分成两个单独的列,last、 和first、 usecut或其他一些动词,并将结果输出为JSON。

我应该补充一点,我并没有与 JSON 结婚,而且我知道如何使用其他工具,例如jq,但如果能一步获得这种格式就太好了。

该动词的语法nest看起来需要记住很多坦率地说难以记忆的选项,所以我认为应该有一个简单的 DSL 操作来完成这项工作。也许事实并非如此?

这是我尝试过的。 (让我们忘记Firstname现在附加的额外空间,好吗?稍后我会使用striporssub或其他东西来摆脱它。)

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比使用动词及其所有必需的标志容易得多。

相关内容