请参阅以下输出:
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
感谢。
答案 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或名为参数的文件的输入。