여러 줄의 문자열과 정보가 포함된 log.txt 파일이 있습니다.
log.txt 파일을 한 줄씩 읽는 스크립트와 debug라는 단어가 포함된 모든 줄을 작성하고 싶습니다. 해당 줄을 debug.txt라는 새 파일에 넣고 다른 모든 줄은 info.txt로 이동해야 합니다.
이를 수행하는 가장 좋은 방법은 무엇입니까? while 루프를 만들어 보았지만 알아낼 수 없었습니다. 감사해요
답변1
이를 수행하는 방법은 무수히 많습니다. 제가 사용하는 처음 두 가지는 awk와 grep입니다(순서대로).
앗
awk '/debug/ { print > "debug.txt" ; next ;} { print } ' logfile > info.txt
어디
/debug
/ debug라는 단어가 있는 줄을 선택합니다.{ print > "debug.txt" ;
debug.txt로 인쇄next ;}
로그 파일의 다음 줄 읽기{ print }
디버깅하지 않는 경우 표준 출력으로 인쇄합니다.> info.txt
표준 출력을 info.txt로 리디렉션
좀 더 공식적인 순서
awk '/debug/ { print > "debug.txt" ; }
$0 !~ /debug/ { print > "info.txt " ; } ' logfile
어디
$0 !~ /debug/
즉, 디버그가 나타나지 않아도 괜찮습니다.
grep
grep debug logfile > debug.txt
grep -v debug logfile > info.txt
어디
grep debug
디버그가 포함된 라인을 선택하세요.grep -v debug
디버깅하지 않을 라인을 선택하세요- 로그 파일을 두 번 읽습니다.
>
또한 보존을 사용하면 >>
셸 또는 awk에서 사용될 때 debug.txt 및 info.txt의 이전 내용이 삭제됩니다.
답변2
bash
작업을 수행하는 스크립트 는 다음과 같습니다 .
while IFS= read -r line; do
if [[ $line =~ debug ]]; then
echo "$line" >>debug.txt
else
echo "$line" >>info.txt
fi
done <log.txt