2014-02-06 13 views
0

請參見下面的輸出:具有數用grep所有這些線「2」之後的「@」的第五發生

SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,[email protected]@[email protected]@[email protected]@[email protected][email protected]@1389599874171 
SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,[email protected]@[email protected]@[email protected]@[email protected][email protected]@-1 

含有多行像上面的文件。如果您可以看到上面的不同字段由「@」符號分隔。我的目的是在第5次出現「@」符號後選擇所有編號爲「3」的行。

和上面的輸出一樣,結果應該如下。因爲@符號出現5次後它有3號。

SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,[email protected]@[email protected]@[email protected]@[email protected][email protected]@1389599874171 

謝謝。

回答

5

嘗試這一行:

awk [email protected] '$6~/^3/' yourfile 

注意我寫~/^3/,因爲你剛纔說的3 第五@後。我想3foobar也應該算在內。

如果你想確切的column6一個字符,它應該是3,你可以改變行成$6==3

+0

這很聰明,我試圖通過'FS =「」'來循環每個字段......好,+1 – fedorqui

1

也許我沒有理解這個問題,但我測試了這個解決方案

#!/usr/bin/perl 

use warnings; 
use strict; 

my @lines = ('SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,[email protected]@[email protected]@[email protected]@[email protected][email protected]@1389599874171', 
    'SubNetwork=ONRM_ROOT_MO_R,SubNetwork=IPRAN,[email protected]@[email protected]@[email protected]@[email protected][email protected]@-1'); 

foreach my $line (@lines) { 
    my @parts = split ("@", $line); 
    print $line if ($parts[5] =~ /^3$/); 
} 

here,它的工作。

1

第6場等於3:

grep '^\([^@]*@\)\{5\}[email protected]' # POSIX regex 

grep -P '^([^@]*@){5}[email protected]'  # Perlish regex 

perl [email protected] -ane'print if $F[5] eq "3"' 

第6場開始以3:

grep '^\([^@]*@\)\{5\}3' # POSIX regex 

grep -P '^([^@]*@){5}3'  # Perlish regex 

perl [email protected] -ane'print if $F[5] =~ /^3/' 

以上所有的從STDIN或命名爲參數文件接受輸入。

相關問題