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