首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl:将字符串内容加载到数组中

Perl:将字符串内容加载到数组中
EN

Stack Overflow用户
提问于 2012-06-19 11:23:33
回答 4查看 782关注 0票数 1

我有一个简单的问题希望你们能帮我解开。我正在稳定地学习perl。

假设我有一个非常大的字符串,例如以下命令的输出:

代码语言:javascript
运行
复制
our $z = `du -B MB /home`

这将生成如下所示的字符串:

代码语言:javascript
运行
复制
1MB     /home/debug/Music
1MB     /home/debug/Downloads
20MB    /home/debug
20MB    /home/

我想知道的是,如何将这个字符串加载到一个两列n行的数组中(其中n是du输出中的行数)?

我尝试了下面这样的方法:

代码语言:javascript
运行
复制
my $z1 = `du -B MB /home | tail -4`;
my @c0 = split (/n/, $z1);
my $z2 = join (/\t/, @c0);
my @c2=split(/\t/, $z2);
print @c2;

这将产生以下输出:

代码语言:javascript
运行
复制
1MB/home/debug/Music1MB/home/debug/Downloads20MB/home/debug20MB/home

我想我可以使用替换函数s/g将目录替换为null值,并将空间值设置为一个数组,将空间值设置为null并将其设置为另一个数组,并且可以将一个数组设置为另一个数组的键。

有没有人有什么建议是最好的方法呢?

任何帮助都是非常感谢的。

谢谢,

迭戈

EN

回答 4

Stack Overflow用户

发布于 2012-06-19 11:41:09

代码语言:javascript
运行
复制
#!/usr/bin/perl;
my $z= `du -h -d 1 /home/*`;
my @array  = split("\n",$z);
foreach my $ar(@array) {
my @ar = split("\t",$ar);
$ar = \@ar;
}

foreach my $entry(@array) {
print $entry->[0];
print $entry->[1];

}
票数 1
EN

Stack Overflow用户

发布于 2012-06-19 11:44:38

您可以尝试将它们存储在散列中,如下所示:

代码语言:javascript
运行
复制
#!/usr/bin/perl

use strict;
use warnings;

my $data = '1MB /home/work 4MB /user/bin';
my %values = split(' ', $data);
foreach my $k (keys %values) {
    print "$k: $values{$k}\n";
}
exit 0;

请注意,作为split的第一个参数的' '将匹配任何空格字符(因此我们充分利用了这一点)。上面的输出应该是这样的:

代码语言:javascript
运行
复制
1MB: /home/work
4MB: /user/bin

您必须将原始数据转换为$data,并检查散列是否对您有效。

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 16:56:44

我敢肯定你们这些perl老手不会喜欢这个解决方案,但我基本上还是决定从根本上解决问题。我在前面的for循环中遇到了这个问题,但我意识到只要答案存储在字符串中,我就可以利用管道通过shell进行计算。

代码语言:javascript
运行
复制
my $z1; my $z2;

$z1 = `du -B MB /home | cut -f1`
$z2 = `du -B MB /home | cut -f2`

my @a1; my @a2;

@a1 = split("\n", $z1);
@a2 = split("\n", $z2);

数组@a1保存第一个字符串中的值,@a2保存第二个字符串中的值。

我要问你们的问题是,有没有一个perl等同于unix的'cut‘实用程序?例如,我可以将字符串输出拆分到第一个制表符分隔的字段吗?这是一个我必须探索的问题。

迭戈

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11093971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档