perl one liner + como combinar o endereço IP localizado no primeiro / segundo campo do arquivo

1

a seguinte sintaxe do perl one liner verifica se o endereço IP em "$ IP" corresponde ao ENDEREÇO IP no arquivo

     perl -ne 'BEGIN{$IP=shift} print if /(^|\s)\Q$IP\E(\s|$)/;' $IP file
O arquivo

tem dois campos

como o exemplo a seguir

more file


192.9.200.1  172.19.2.100
10.23.1.10   34.12.0.1
45.2.11.1    192.9.200.1
.
.
.

é possível definir a sintaxe do perl para corresponder ao IP que existe no primeiro campo ou no segundo campo? - se sim o que eu preciso mudar na minha sintaxe para isso?

por exemplo (caso desejemos combinar apenas o primeiro campo)

     perl -ne 'BEGIN{$IP=shift} print if /(^|\s)\Q$IP\E(\s|$)/;' 192.9.200.1 file

então deve corresponder ao IP - 192.9.200.1 que existe no primeiro campo da linha:

   "192.9.200.1  172.19.2.100"
    
por yael 20.06.2013 / 17:18

2 respostas

2

Eu usaria a opção "divisão automática" do perl -a e evitar as regexes

perl -lane 'BEGIN{$IP=shift} print if $F[0] eq $IP or $F[1] eq $IP' $IP file
perl -lane 'BEGIN{$IP=shift} print if grep {$_ eq $IP} @F[0,1]' $IP file

-l oferece a você chomp ing automática e novas linhas automáticas para a declaração de impressão.

o awk é mais simples:

awk -v ip=$IP '$1==ip || $2==ip' file

Uma segunda leitura da pergunta indica que você pode querer corresponder apenas à primeira coluna ou somente à segunda coluna. Para passar o número da coluna como um parâmetro:

perl -lane '
    BEGIN {($IP,$col) = splice @ARGV,0,2}
    print if $F[$col-1] eq $IP
' $IP 2 file
awk -v ip=$IP -v col=2 '$col == ip' file

Estes retornam, dados seus dados de amostra:

45.2.11.1    192.9.200.1
    
por 20.06.2013 / 17:50
0

Para o "há mais de uma maneira de fazer isso". : -)

Outra maneira de encontrar o endereço IP na coluna um ou na coluna dois é usar o grep.

Para a coluna 1:

grep ^192.9.200.1 file

Isso gera todas as linhas com seu IP na primeira coluna.

Para a coluna 2:

grep 192.9.200.1$ file

Isso gera todas as linhas com o seu IP na última coluna.

Eu gosto da solução que Glenn criou usando o awk para ver se o IP está na coluna 1 & 2, é legal e legível.

    
por 20.06.2013 / 18:48