grep awk ou sed uma CSV Row contendo uma parte específica de um endereço da web

2

Estou tentando limpar um arquivo de log do Squid e quero excluir linhas com um site contendo "/ 0 /" na 11ª coluna. Um exemplo:

Row1: column1, column2, column3...column10, ht*p://blah.com/page/230/0/blah0.html
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row3: column1, column2, column3...column10, ht*p://www.yahata.org/things/time/0/yahata.php
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

Ignore o "*" em "http" porque o stackexchange achava que eram links reais.

Essencialmente, quero excluir as linhas 1 e amp; 3 mas deixe as linhas 2 & 4. Eu tentei todos os comandos grep , awk e sed que eu poderia encontrar ou pensar. Eu posso obter grep para excluir se houver elementos na coluna1, mas nenhum dos outros.

    
por Pacific Coast School 03.02.2016 / 08:00

1 resposta

1

Parece que você quer que as linhas não tenham /0/ na última coluna, você pode fazer:

grep -v '[^[:blank:]]*/0/[^[:blank:]]*$' file.txt

Exemplo:

% grep -v '[^[:blank:]]*/0/[^[:blank:]]*$' file
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

Por outro lado, se você quiser corresponder exatamente à 11ª coluna, faça o seguinte:

grep -vE '^([^[:blank:]]+[[:blank:]]+){10}[^[:blank:]]*/0/[^[:blank:]]*$' file.txt

Exemplo: correspondência da 5ª coluna

% grep -vE '^([^[:blank:]]+[[:blank:]]+){4}[^[:blank:]]*/0/[^[:blank:]]*$' file
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php
    
por 03.02.2016 / 08:17

Tags