Создайте и добавьте ключ HASH-ID с парами значений в файл объектов JSON для каждой строки с помощью команды оболочки miller
Я хочу создать unique-ID/hash-ID
для каждой строки в моем JSONs
файл на основе всех значений в каждом JSON object
Я начал с этого, но не уверен, нужно ли указывать явное имя столбца или есть способ включить все столбцы без явного указания имен столбцов.
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"}
1 ответ
Решение
Предполагая, что входной файл file.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 для получения желаемого результата:
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"}