使用miller shell命令为每一行创建一个JSON对象文件,并将带有值对的哈希ID键附加到该文件中

使用miller shell命令为每一行创建一个JSON对象文件,并将带有值对的哈希ID键附加到该文件中,json,linux,shell,cmd,miller,Json,Linux,Shell,Cmd,Miller,我希望基于每个JSON对象中的所有值,为我的JSONs文件中的每一行创建一个唯一ID/hash ID 我从这里开始,但不确定是否必须使用显式列名,或者是否有一种方法可以包含所有列而不显式使用列名 mlr --json put -S '$hash_id=$f_name."".$l_name."".$title' then reorder -e -f job file.json file.json输入: {"f_nams":"H

我希望基于每个
JSON对象中的所有值,为我的
JSONs
文件中的每一行创建一个
唯一ID/hash ID

我从这里开始,但不确定是否必须使用显式列名,或者是否有一种方法可以包含所有列而不显式使用列名

mlr --json put -S '$hash_id=$f_name."".$l_name."".$title' then reorder -e -f job file.json
file.json
输入:

{"f_nams":"Hana","title":"Mrs","l_name":"Smith"}
{"f_nams":"Mike","title":"Mr","l_name":"Larry"}
{"f_nams":"Jhon","title":"Mr","l_name":"Doe"}
期望输出:

{"f_nams":"Hana","title":"Mrs","l_name":"Smith","hash_id":"hash_value_based_on_all_columns"}
{"f_nams":"Mike","title":"Mr","l_name":"Larry","hash_id":"hash_value_based_on_all_columns"}
{"f_nams":"Jhon","title":"Mr","l_name":"Doe","hash_id":"hash_value_based_on_all_columns"}
perl -MMIME::Base64 -ne '
/"f_nams":"(\w+)","title":"(\w+)","l_name":"(\w+)"/ && do {
($fn,$tt,$ln)=($1,$2,$3);
$x=$fn . $tt . $ln;
chomp($hashvalue = encode_base64($x));
s/\}/,"hash_id":"$hashvalue"\}/;print}' file.json

假设输入文件.json的格式如下所示:

cat file.json
{"f_nams":"Hana","title":"Mrs","l_name":"Smith"}
{"f_nams":"Mike","title":"Mr","l_name":"Larry"}
{"f_nams":"Jhon","title":"Mr","l_name":"Doe"}
然后,一种方法是使用以下perl脚本生成所需的输出:

{"f_nams":"Hana","title":"Mrs","l_name":"Smith","hash_id":"hash_value_based_on_all_columns"}
{"f_nams":"Mike","title":"Mr","l_name":"Larry","hash_id":"hash_value_based_on_all_columns"}
{"f_nams":"Jhon","title":"Mr","l_name":"Doe","hash_id":"hash_value_based_on_all_columns"}
perl -MMIME::Base64 -ne '
/"f_nams":"(\w+)","title":"(\w+)","l_name":"(\w+)"/ && do {
($fn,$tt,$ln)=($1,$2,$3);
$x=$fn . $tt . $ln;
chomp($hashvalue = encode_base64($x));
s/\}/,"hash_id":"$hashvalue"\}/;print}' file.json
产生:

{"f_nams":"Hana","title":"Mrs","l_name":"Smith","hash_id":"SGFuYU1yc1NtaXRo"}
{"f_nams":"Mike","title":"Mr","l_name":"Larry","hash_id":"TWlrZU1yTGFycnk="}
{"f_nams":"Jhon","title":"Mr","l_name":"Doe","hash_id":"Smhvbk1yRG9l"}

mlr
是一个非常棒的处理JSON小操作的工具,我认为最新版本中不存在哈希创建函数。您想使用
jq
一个更强大的JSON解析器来回答这个问题吗?并解释您试图创建的哈希的性质是什么
md5
sha
base64
?(后者在
jq
中得到了开箱即用的支持)当然,我想探索
jq
。现在我将使用
base64
<代码>sha
也适用于我的用例。