在第5次出现“@”后,所有那些数字为“2”的行

时间:2014-02-06 15:00:55

标签: 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

包含多行的文件,如上所述。如果您可以看到上面的不同字段用“@”符号分隔。我打算在第5次出现“@”符号后选择所有那些数字为“3”的行。

与上面的输出一样,结果应如下所示。因为在@符号出现五次之后它有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

感谢。

3 个答案:

答案 0 :(得分:5)

试试这一行:

awk -F@ '$6~/^3/'  yourfile

注意我写了~/^3/,因为您刚刚在第五个@ 之后说了。我想3foobar也应该计算在内。

如果您想在第6列中使用完全一个字符,并且该字符应为3,则可以将该行更改为$6==3

答案 1 :(得分:1)

也许我没有理解这个问题,但我测试了这个解决方案

#!/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$/);
}

here并且有效。

答案 2 :(得分:1)

第6场等于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或名为参数的文件的输入。