my @up = `cat abc.txt|head -2|tail -1|cut -d' ' -f1-3`;而不是将各个字段存储在数组中。它将整个输出作为字符串存储在第一个元素中。
这是我得到的输出
$up[0] = 'xxx 12 234'我想要这个
@up = ('xxx', 12, 234)|
发布于 2016-01-29 17:01:20
看起来您需要文件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]发布于 2016-01-29 15:17:19
您可以按空格拆分结果:
my @up = split(/\s+/, `cat abc.txt ...`);或者在此之前,您可以将输入记录分隔符设置为空格。然而,这个没有那么灵活,它只是一个简单的字符串,所以如果一行中有两个空格,它会将其视为中间的空字段:
local $/ = " ";
my @up = `cat abc.txt ...`;https://stackoverflow.com/questions/35078647
复制相似问题