如何将cut命令的值存储到Perl数组中?

时间:2016-01-29 07:01:17

标签: perl

my @up = `cat abc.txt|head -2|tail -1|cut -d' ' -f1-3`;

而不是将各个字段存储在数组中。它将整个输出作为字符串存储在第一个元素中。

这是我得到的输出

$up[0] = 'xxx 12 234'

我想要这个

@up = ('xxx', 12, 234)

|

2 个答案:

答案 0 :(得分:2)

看起来你想要第二行文件abc.txt的前三个以空格分隔的字段

问题是反引号会在数组的每个元素中返回一行输出,并且因为cut在一行上打印所有三个字段,所以它们显示为单个数组元素。

你可以在Perl中再次split这个值,但是当你拥有整个Perl语言时,使用shell做一些如此简单的事情是浪费的,你应该在Perl中做所有事情

这个程序可以按照你的要求进行。我只使用了Data::Dump,以便您可以验证@up的内容是否符合您的要求

use strict;
use warnings 'all';

use Data::Dump;

my @up = do {
    open my $fh, '<', 'abc.txt' or die $!;
    <$fh>;  # Skip one line
    (split ' ', <$fh>)[0 .. 2];
};

dd \@up;

输出

["xxx", 12, 234]

答案 1 :(得分:1)

您可以按空格分割结果:

my @up = split(/\s+/, `cat abc.txt ...`);

或之前您可以将输入记录分隔符设置为空格。然而,这个不是那么灵活,它只是简单的字符串,所以如果连续有两个空格,它会将它视为中间的空字段:

local $/ = " ";
my @up = `cat abc.txt ...`;