grep para comparar arquivos que não estão funcionando

0

Eu usei com sucesso:

grep -wFf inputqueries.txt seachedfile.txt > results.txt

para procurar o arquivo pesquisado.txt para cada consulta em inputqueries.txt.

inputqueries.txt se parece com:

213.183.56.186
216.176.100.240
216.215.112.149
217.23.49.178
222.29.197.232
23.235.201.32
23.253.150.120
202.112.166.5

searchingfile.txt parece com

168.68.129.127  184.73.191.34
199.133.78.171  202.112.166.5
64.180.139.190  199.141.121.11
199.133.186.162 128.118.250.5
54.145.167.92   168.68.129.73
199.154.229.66  23.75.15.164
162.79.16.103   199.134.135.69

e results.txt foi corretamente

199.133.78.171  202.112.166.5

Infelizmente , é aí que meu sucesso parou. Quando eu coloquei para trabalhar no mundo real, não funcionou. Toda vez que retornou zero resultados.

Eu usei o mesmo inputqueries.txt, bem como um com uma lista de palavras de consulta (em oposição a IPs). Além disso, é importante observar que não tenho privilégios de gravação para os diretórios de arquivos de log reais e a maioria dos logs é compactada como .gz. Além disso, estou tentando pesquisar vários arquivos semelhantes ao mesmo tempo (zcat http , zcat conn. *, Etc)

zcat filestosearch.* | grep -wFf /home/username/inputqueries.txt > /home/username/results.txt

Não funcionou (nem funcionou se eu tirei -wF e deixei apenas grep -f)

zgrep -wFf /home/username/inputqueries.txt filestosearch.* > /home/username/results.txt

Não funcionou também.

Os registros que estou pesquisando na vida real variam, mas o http parece ... (são todos os logs bro)

1432343999.435553       CuCcn04H20cc2ZHyEh      202.170.48.4    50501   197.138.26.55   80      4       GET     ndb.nal.usda.gov        /ndb/search/autosuggest?manu=&fgcd=&term=Coconut+milk       http://ndb.nal.usda.gov/ndb/foods?fgcd=&manu=&lfacet=&count=&max=35&sort=&qlookup=Oil%2C+palm&offset=&format=Abridged&new=&measureby=   Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36    0       12994   200     OK      -       -       -       (empty) -       -       -       -       -       FGGh0g4a24L8Q6CZUb     text/plain
1432343999.382108       CKPWGW2cubkRjFpTKf      197.166.19.125   63803   54.191.210.216  80      1       GET     client.ql2.com  /cc/diff/http.www.ars.usda.gov/_22Fpandp_22Flocations_22FcityPeopleList.cfm_23Fmodecode_23D60-64-05-10/20150409123538diff.html  -       WebTrends/3.0 (WinNT)  00       302     Moved Temporarily       -       -       -       (empty) -       -       -       -       -       -       -
1432343999.595036       Cz4XJl3uaq2Fxc0M9a      63.248.145.199  63004   197.155.76.112  80      1       GET     start2farm.gov  /sites/all/themes/contrib/twitter_bootstrap/images/arrow-green.png      http://start2farm.gov/  Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko     0       1498    200     OK      -       -       -       (empty) -       -       -       -       -       Fo69Ao3w36RxKcoH9f     image/png
1432343999.732470       CTPQZyQ7tX7BUjU5j       197.123.240.10    56863   216.58.217.132  80      36      GET     toolbarqueries.google.com      /tbr?client=navclient-auto&ch=63738508926&features=Rank&q=info:/url?q=http://www.ncbi.nlm.nih.gov/books/NBK8125/&sa=U&ei=FjjmVJriAceagwSM1oOIDg&ved=0CBsQFjAB&usg=AFQjCNHgMKW6EIWKxclKB9o-o21bQu7IOw     -       Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618)    0       5928    403     Forbidden       -      --       (empty) -       -       -       -       -       F2UdRnxrFUEHJFdW4       text/html

Usando o comando de linha única mais simples que posso, como faço o grep de um arquivo funcionar?

    
por user112802 23.05.2015 / 04:10

1 resposta

2

O problema parece ser que o arquivo foi editado no Windows em algum momento, o que adicionou alguns caracteres \r extras às extremidades, que normalmente não são visíveis.

Se você tiver o comando dos2unix , poderá usá-lo para converter o arquivo. Se você não tem isso e não há nenhum espaço em branco importante nas extremidades das linhas, você pode fazê-lo com o GNU sed da seguinte forma:

sed -i -e 's/\s*$//' inputqueries.txt

para modificar o arquivo em vigor (o sinalizador -i ) e, em seguida, substituir qualquer quantidade de espaço em branco no final da linha com nada, excluindo-o efetivamente. -i não faz parte do POSIX, portanto, se você precisar de uma solução portátil, poderá usar o restante do comando sed e redirecionar para um arquivo temporário. Quando tiver certeza de que o arquivo está certo, renomeie-o para o arquivo que você realmente deseja.

    
por 23.05.2015 / 13:23

Tags