나는 성공적으로 사용했습니다:
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
임시 파일로 리디렉션할 수 있습니다. 파일이 정확하다고 확신하면 실제로 원하는 파일로 이름을 바꾸십시오.