将键分配给来自外部命令结果的值
Assigning keys to values from external command results
我卡住了。我 运行 来自外部工具的命令。此工具的输出格式如下:
{
{
Dan Summers
Male
Funds less than 0
March 23, 2021 1:58:24 PM
Undisclosed
}
{
Susan August
Female
no funds
March 23, 2021 7:58:24 AM
Expired
}
}
我需要为值分配一个键以便稍后进行一些匹配并将其打印为一行,但我不确定如何执行此操作。
首先,我做了一些搜索和替换,使其成为单行。但后来我突然意识到我仍然没有办法添加密钥。作为我所做的例子:
use strict;
use warnings;
my $result = `command`;
$result =~ s/\n//g;
print "$result";
结果是:
{ { Dan Summers Male Funds less than 0 March 23, 2021 1:58:24 PM Undisclosed } { Susan August Female no funds March 23, 2021 7:58:24 AM GMT+02:00 Expired }}
然后我尝试在尝试将它变成一个字符串之前添加键,但显然这不是一个拆分数组,所以使用 $arr[0]
将不起作用..所以我们都知道这是怎么回事:
use strict;
use warnings;
my @result = `command`;
for my $res(@result) {
print "line: $res[0]"
}
如何添加键才能获得类似于 JSON 结果的内容?类似于:
{
{
name: Dan Summers
gender: Male
fundstatus: Funds less than 0
updated: March 23, 2021 1:58:24 PM
status: Undisclosed
} ....
在此非常感谢您的指导。
编辑
忘了说了。外部工具没有任何匹配条件来搜索用户名或任何类似的东西。如果您 运行 工具和结果中有 10 个人,它将以第一个示例的格式打印所有 10 个人。作为仅供参考,因此无法仅提取用户为“Dan”的详细信息萨默斯”。
这就是我这样做的原因,因此我可以在工具之外构建此功能。
将整个文件视为一个带有非常奇怪的分隔符的 CSV 文件。您的记录分隔符是 }{
和空格的组合。您的字段分隔符是换行符。清理周围的括号或忽略它们。
我的代码不进行任何输入格式验证,但会为您提供处理为 DBI 所需的值。
use strict;
use warnings;
# replace with your shell-out
my $input = do { local $/ = undef; <DATA> };
foreach my $record ( split '}', $input) {
my ($name, $gender, $fundstatus, $updated, $status) = grep {/[^{}\s]/ } split "\n", $record;
next unless $name;
# ...
}
__DATA__
{
{
Dan Summers
Male
Funds less than 0
March 23, 2021 1:58:24 PM
Undisclosed
}
{
Susan August
Female
no funds
March 23, 2021 7:58:24 AM
Expired
}
}
我卡住了。我 运行 来自外部工具的命令。此工具的输出格式如下:
{
{
Dan Summers
Male
Funds less than 0
March 23, 2021 1:58:24 PM
Undisclosed
}
{
Susan August
Female
no funds
March 23, 2021 7:58:24 AM
Expired
}
}
我需要为值分配一个键以便稍后进行一些匹配并将其打印为一行,但我不确定如何执行此操作。 首先,我做了一些搜索和替换,使其成为单行。但后来我突然意识到我仍然没有办法添加密钥。作为我所做的例子:
use strict;
use warnings;
my $result = `command`;
$result =~ s/\n//g;
print "$result";
结果是:
{ { Dan Summers Male Funds less than 0 March 23, 2021 1:58:24 PM Undisclosed } { Susan August Female no funds March 23, 2021 7:58:24 AM GMT+02:00 Expired }}
然后我尝试在尝试将它变成一个字符串之前添加键,但显然这不是一个拆分数组,所以使用 $arr[0]
将不起作用..所以我们都知道这是怎么回事:
use strict;
use warnings;
my @result = `command`;
for my $res(@result) {
print "line: $res[0]"
}
如何添加键才能获得类似于 JSON 结果的内容?类似于:
{
{
name: Dan Summers
gender: Male
fundstatus: Funds less than 0
updated: March 23, 2021 1:58:24 PM
status: Undisclosed
} ....
在此非常感谢您的指导。
编辑 忘了说了。外部工具没有任何匹配条件来搜索用户名或任何类似的东西。如果您 运行 工具和结果中有 10 个人,它将以第一个示例的格式打印所有 10 个人。作为仅供参考,因此无法仅提取用户为“Dan”的详细信息萨默斯”。
这就是我这样做的原因,因此我可以在工具之外构建此功能。
将整个文件视为一个带有非常奇怪的分隔符的 CSV 文件。您的记录分隔符是 }{
和空格的组合。您的字段分隔符是换行符。清理周围的括号或忽略它们。
我的代码不进行任何输入格式验证,但会为您提供处理为 DBI 所需的值。
use strict;
use warnings;
# replace with your shell-out
my $input = do { local $/ = undef; <DATA> };
foreach my $record ( split '}', $input) {
my ($name, $gender, $fundstatus, $updated, $status) = grep {/[^{}\s]/ } split "\n", $record;
next unless $name;
# ...
}
__DATA__
{
{
Dan Summers
Male
Funds less than 0
March 23, 2021 1:58:24 PM
Undisclosed
}
{
Susan August
Female
no funds
March 23, 2021 7:58:24 AM
Expired
}
}