앗

여러 줄의 문자열과 정보가 포함된 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

관련 정보