我有一个 perl 脚本,用于将文本文件转换为 json。
该脚本如下所示:
perl -MJSON -F, -lane '
print to_json ({
domain => shift @F,
emails => [map {{email =>$_}} @F]
}, {canonical=>1})
' input1.txt' > output.json
此脚本将输出写入 JSON 格式的文件。
我想知道如何修改脚本以截断输入。
以下是示例:
输入文件包含以下内容:
example.com,[email protected],[email protected],[email protected],[email protected],....
输出 JSON 文件将是:
{"domain":"example.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....]}
点(.)表示此后还会添加其他电子邮件。
现在我想要的是,如果电子邮件超过 21,那么脚本应该在输出文件中写入新行
输入文件:
example.com,[email protected],[email protected],[email protected],[email protected],[email protected]
输出应该是:
{"domain":"example.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....,{email:[email protected]}]}
{"domain":"example.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....]}
{"domain":"nextdomain.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....]}
这个过程还在继续。
答案1
使用拼接循环删除数组的前 21 个元素:
perl -MJSON -F, -lane '
$domain = shift @F;
while (@f = splice @F, 0, 21) {
print to_json ({
domain => $domain,
emails => [ map { { email => $_ } } @f ]
}, { canonical => 1 });
}
'