首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将cut命令中的值存储到Perl数组中?

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

Stack Overflow用户
提问于 2016-01-29 15:01:17
回答 2查看 181关注 0票数 2
代码语言:javascript
复制
my @up = `cat abc.txt|head -2|tail -1|cut -d' ' -f1-3`;

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

这是我得到的输出

代码语言:javascript
复制
$up[0] = 'xxx 12 234'

我想要这个

代码语言:javascript
复制
@up = ('xxx', 12, 234)

|

EN

回答 2

Stack Overflow用户

发布于 2016-01-29 17:01:20

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

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

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

这个程序会按照你的要求去做。我使用Data::Dump只是为了让您能够验证@up的内容是否与您想要的一样

代码语言:javascript
复制
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;

输出

代码语言:javascript
复制
["xxx", 12, 234]
票数 2
EN

Stack Overflow用户

发布于 2016-01-29 15:17:19

您可以按空格拆分结果:

代码语言:javascript
复制
my @up = split(/\s+/, `cat abc.txt ...`);

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

代码语言:javascript
复制
local $/ = " ";
my @up = `cat abc.txt ...`;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35078647

复制
相关文章

相似问题

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