Perl grep为第1列中的值

时间:2015-02-20 14:32:07

标签: perl awk grep

我在Perl中进行的系统调用如下:

@filesystems = `/nas/bin/nas_fs -query:TypeNumeric==1:IsRoot==False -fields:RWServers,ROServers,Name,RWMountpoint, -format:%L:%L:%s:%s\\\\n`;

运作良好。它得到了我想要的信息:

server_5::fs_pipeline_950155:/root_vdm_30/fs_pipeline_95015    
:server_7:fs_nfs_esx_wks_vms:    
server_7::fs_ovid3:/fs_ovid3

但是,如果我想真的只填充@filesystems条目,其中第1列中有值(即第一个值...示例中的第1行和第3行上面),我不确定如何实现这一目标。 awk -F通过管道似乎不起作用。

2 个答案:

答案 0 :(得分:1)

你可以在Perl中做到这一点:

my @temp = `/nas/bin/nas_fs -query:TypeNumeric==1:IsRoot==False -fields:RWServers,ROServers,Name,RWMountpoint, -format:%L:%L:%s:%s\\\\n`;
my @filesystems = grep { !/^:/ } @temp;

这会过滤掉列表中以冒号开头的所有条目。

或者,您可以调用另一个进程:

my @filesystems = `/nas/bin/nas_fs <args> | grep -v '^:'`;

grep -v仅返回与模式不匹配的行,因此排除以冒号开头的行。

答案 1 :(得分:1)

您可以在填充@filesystems之后在脚本中执行此操作:

# Removes blank lines and lines starting with :
@filesystems = grep { !/(^:|^\s*$/ } @filesystems;