my @up = `cat abc.txt|head -2|tail -1|cut -d' ' -f1-3`;
而不是将各个字段存储在数组中。它将整个输出作为字符串存储在第一个元素中。
这是我得到的输出
$up[0] = 'xxx 12 234'
我想要这个
@up = ('xxx', 12, 234)
|
答案 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 ...`;