Perl grep所有有编号的行;2“;在第5次出现“之后”@&引用;
请参阅以下输出:Perl grep所有有编号的行;2“;在第5次出现“之后”@&引用;,perl,awk,grep,Perl,Awk,Grep,请参阅以下输出: SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,MeContext=U207@10.218.131.141@5.5@15@ON@3@5@STN_NODE_MODEL@1389599874171@1389599874171 SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,MeContext=U201@10.218.132.161@5.8@15@ON@1@4@STN_NODE_MODEL@-1@-1 包含
SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,MeContext=U207@10.218.131.141@5.5@15@ON@3@5@STN_NODE_MODEL@1389599874171@1389599874171
SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,MeContext=U201@10.218.132.161@5.8@15@ON@1@4@STN_NODE_MODEL@-1@-1
包含如上所述的多行的文件。如果可以看到不同的字段在上面用“@”符号分隔。我的目的是选择第五次出现“@”符号后编号为“3”的所有行
与上述输出类似,结果应如下所示。因为@symbol之后有数字3出现了五次
SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,MeContext=U207@10.218.131.141@5.5@15@ON@3@5@STN_NODE_MODEL@1389599874171@1389599874171
谢谢。试试这句话:
awk -F@ '$6~/^3/' yourfile
注意我写了~/^3/
,因为你刚刚在第五个@
之后说了3。我想3foobar
也应该被计算在内
如果您希望第6列中有一个字符,并且应该是
3
,您可以将该行更改为$6==3
,可能我还没有理解这个问题,但我测试了这个解决方案
#!/usr/bin/perl
use warnings;
use strict;
my @lines = ( 'SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,MeContext=U207@10.218.131.141@5.5@15@ON@3@5@STN_NODE_MODEL@1389599874171@1389599874171',
'SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,MeContext=U201@10.218.132.161@5.8@15@ON@1@4@STN_NODE_MODEL@-1@-1');
foreach my $line (@lines) {
my @parts = split ("@", $line);
print $line if ($parts[5] =~ /^3$/);
}
第六个字段等于3:
grep '^\([^@]*@\)\{5\}3@' # POSIX regex
grep -P '^([^@]*@){5}3@' # Perlish regex
perl -F@ -ane'print if $F[5] eq "3"'
第6个字段以3开头:
grep '^\([^@]*@\)\{5\}3' # POSIX regex
grep -P '^([^@]*@){5}3' # Perlish regex
perl -F@ -ane'print if $F[5] =~ /^3/'
以上所有内容都接受来自STDIN或名为arguments的文件的输入。这很聪明,我试图用
FS=”“
循环遍历每个字段。。。太好了,+1