grep 비교 파일이 작동하지 않습니다

grep 비교 파일이 작동하지 않습니다

나는 성공적으로 사용했습니다:

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

inputqueries.txt의 각 쿼리에 대해 searchedfile.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

안타깝게도, 그리고 그것이 내 성공이 멈춘 곳입니다. 이것을 현실 세계에 적용해 보면 작동하지 않습니다. 0개의 결과를 반환할 때마다.

나는 (IP 대신) 단어 쿼리 목록과 함께 동일한 inputqueries.txt 파일을 사용했습니다. 또한 실제 로그 파일 디렉터리에 대한 쓰기 권한이 없으며 대부분의 로그가 다음과 같이 압축된다는 점도 주목할 가치가 있습니다..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

\r문제는 Windows의 어느 시점에서 파일이 편집되어 끝에 일반적으로 표시되지 않는 추가 문자가 추가된 것 같습니다 .

해당 명령이 있으면 dos2unix이를 사용하여 파일을 변환할 수 있습니다. 이것이 없고 줄 끝에 중요한 공백이 없으면 다음과 같이 GNU sed를 사용하여 수행할 수 있습니다.

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

파일( -i플래그)을 제자리에서 수정하고 줄 끝의 공백을 공백 없이 대체하여 효과적으로 제거합니다. -i그러나 이는 POSIX의 일부가 아니므로 이식 가능한 솔루션이 필요한 경우 명령의 나머지 부분을 사용하여 sed임시 파일로 리디렉션할 수 있습니다. 파일이 정확하다고 확신하면 실제로 원하는 파일로 이름을 바꾸십시오.

관련 정보