grep 比较文件不起作用

grep 比较文件不起作用

我成功使用了:

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

在 searchedfile.txt 中搜索 inputqueries.txt 中的每个查询。

inputqueries.txt 如下所示:

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

searchedfile.txt 看起来像

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

results.txt 是正确的

199.133.78.171  202.112.166.5

很遗憾,那就是我的成功停止的地方。当我将其应用于现实世界时,它不起作用。每次它都返回零结果。

我使用了相同的 inputqueries.txt 以及带有单词查询列表(而不是 IP)的文件。此外,值得注意的是,我没有实际日志文件目录的写入权限,并且大多数日志都被压缩为.gz。此外,我试图同时搜索多个相似的文件(zcat http、zcat conn.* 等)

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

不起作用(如果我去掉 -wF 并只留下 grep -f 也不起作用)

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

也没起作用。

我在现实生活中搜索的日志有所不同,但 http 看起来像......(它们都是兄弟日志)

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

使用最简单的单行命令,如何使文件中的 grep 工作?

答案1

问题似乎是文件在 Windows 上的某个时刻被编辑,这\r在末尾添加了一些通常不可见的额外字符。

如果您有该dos2unix命令,则可以使用它来转换文件。如果你没有这个并且行尾没有任何重要的空格,你可以使用 GNU sed 来完成,如下所示:

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

就地修改文件(-i标志),然后将行末尾的任意数量的空格替换为空,从而有效地删除它。 -i但它不是 POSIX 的一部分,因此如果您需要便携式解决方案,您可以使用命令的其余部分sed并重定向到临时文件。当您确定该文件正确时,将其重命名为您真正想要的文件。

相关内容