我想打印那些有5个管道分隔符和名字匹配到CHINA的记录。 我尝试过以下方法,但没有输出。
my @country_records = (
'CHINA|hk|UK|pak|ind|arg',
'HK|UK|Pak|ARG|Nep',
'Lon|WC|Chile|SA',
'CHINA|hk|UK|pak|arg|ind',
'CHINA|AFg|UK|pak|arg',
);
for my $item (@county_records) {
my $value = q( awk -F '|' -v string=CHINA 'NF == 5 && $item == string' );
my $record = system($value);
print $item;
}
答案 0 :(得分:3)
无需为此调用awk:
my @items = split /\|/, $item, -1;
if ((@items == 6) && ($items[0] eq 'CHINA')) {
print $item;
}
split
字符上的 |
然后检查它是否有6个项目,第一个是CHINA
。
答案 1 :(得分:1)
非AWK,使用Perl正则表达式匹配:
my @counrty_records = (
'CHINA|hk|UK|pak|ind|arg'
, 'HK|UK|Pak|ARG|Nep'
, 'Lon|WC|Chile|SA'
, 'CHINA|hk|UK|pak|arg|ind'
, 'CHINA|AFg|UK|pak|arg'
);
foreach ( @counrty_records ) {
print $_ . '<br>' if $_ =~ /^CHINA(\|[^\|]*){5}$/;
}
循环管道分隔记录数组,打印以&#34; CHINA&#34;开头的记录。 (区分大小写),后跟5个管道分隔符,每个分隔符后跟0个或更多非管道符。
如果您希望匹配CHINA不区分大小写,请添加&#34; i&#34;改性剂:
/^CHINA(\|[^\|]*){5}$/i