out.log라는 로그 파일이 있습니다. 이 로그 파일에서 문자열 목록(filelist.txt)을 검색해야 합니다.
filelist.txt의 각 파일에 대해 "out.log"에 일치하는 각 줄이 필요합니다. 여러 번 나타날 수 있습니다.
cat out.log | grep -i I466030.CXR910E >> search_result.txt
이렇게 하면 I466030.CXR910E를 검색하여 search_result.txt로 출력합니다.
for i in `cat filelist.txt`; do grep -i "$i" out.log >> result.txt; done
for i in `cat filelist.txt`;
do
echo $i
cat out.log | grep -i $i >> result2.txt
grep $i out.log >> result3.txt
done
위 코드 echo는 검색 문자열을 출력하지만 grep은 결과 *.txt에 출력을 쓰지 않습니다.
내가 여기서 무엇을 놓치고 있는 걸까요? 조언해 주셔서 감사합니다.
의견에 대한 응답:
xxxxxm@cxxxrtrls01[DEV][rerun] $ grep -i -f filelist.txt out.log > result.txt
xxxxxm@cxxxrtrls01[DEV][rerun] $ ll
total 564
-rw-r----- 1 cnrlsadm cnrlsadm 4600 Aug 19 09:36 filelist.txt
-rw-r----- 1 cnrlsadm cnrlsadm 216 Aug 19 10:14 file.sh
-rw-r--r-- 1 cnrlsadm cnrlsadm 557403 Aug 19 10:10 out.log
-rw-r--r-- 1 cnrlsadm cnrlsadm 0 Aug 19 12:14 result.txt
-rw-r----- 1 cnrlsadm cnrlsadm 213 Aug 19 12:10 srch.sh
xxxxxm@cxxxrtrls01[DEV][rerun] $
result.txt의 크기는 0이고 내용이 없습니다.
답변1
grep의
-f
옵션을 사용하여 제공패턴이 포함된 파일따라서 전혀 반복할 필요가 없습니다.grep -i -f filelist.txt out.log > result.txt
이제 한 줄에 한 번이 아닌 grep을 한 번만 호출하면 됩니다. out.log가 크면 CPU가 감사할 것입니다.
답변2
글쎄요..여기 응답의 대부분은 맞습니다. 제 실수는 "filelist.txt"가 Excel과 Windows에서 생성되었다는 것입니다. 일단 파일을 유닉스 형식으로 변환합니다. 모두 제일 좋다.
나는 매우 시간이 많이 걸리는 교훈을 배웠습니다. 질문에 답변해주신 모든 분들께 감사드립니다 :)
좋은 하루 되세요!
답변3
아래 스크립트를 사용해보십시오. 훌륭하게 작동합니다.
for i in `cat filelist.txt`
do
for j in `cat out.log`
do
grep -i "$j" $i
done
done
filelist.txt.====> Consists of filenames