grep은 모든 줄을 저장하지 않습니다

grep은 모든 줄을 저장하지 않습니다

안녕하세요, 커뮤니티의 누군가가 이 코드를 작성했습니다. 문제는 grep의 출력을 파일에 저장하려고 하면 Positivos.txt모든 루프가 아닌 마지막 날만 저장된다는 것입니다. 사용해 보았지만 grep -r -o성공하지 못했습니다.

d1="2020-03-15"
until [[ "$d1" ==  $ano-$mes-$dia ]]
do
rep=$( date -d "$d1" +%d/%m/%Y )
d1=$( date -I -d "$d1 + 1 day" )
grep -o "$estado.*$rep" /home/efc20/Proyecto/CasosPositivos.csv > Positivos.txt
done

답변1

grep여러 번 호출됩니다. 각 후속 호출은 이전 호출의 출력을 덮어씁니다.

  1. 대신 다음을 추가할 수 있습니다.

    d1="2020-03-15"
    until [[ "$d1" ==  $ano-$mes-$dia   ]]
    do
    rep=$( date -d "$d1" +%d/%m/%Y )
    d1=$( date -I -d "$d1 + 1 day" )
    grep   -o "$estado.*$rep" /home/efc20/Proyecto/CasosPositivos.csv >> Positivos.txt
    done
    
  2. 전체 루프의 출력을 수집하여 파일에 쓸 수 있으므로 쓰기는 한 번만 수행됩니다(즉, 파일 열기 한 번). 루프의 다른 부분에서 생성된 출력(코드 변경 후)이 실수로 동일한 파일에 기록될 위험이 있습니다.

    d1="2020-03-15"
    until [[ "$d1" ==  $ano-$mes-$dia   ]]
    do
    rep=$( date -d "$d1" +%d/%m/%Y )
    d1=$( date -I -d "$d1 + 1 day" )
    grep   -o "$estado.*$rep" /home/efc20/Proyecto/CasosPositivos.csv
    done > Positivos.txt
    
  3. 가장 우아한 해결책(이 경우에는 실질적인 차이가 없음)은 새 파일 설명자를 여는 것입니다.

    exec 3>Positivos.txt
    d1="2020-03-15"
    until [[ "$d1" ==  $ano-$mes-$dia   ]]
    do
    rep=$( date -d "$d1" +%d/%m/%Y )
    d1=$( date -I -d "$d1 + 1 day" )
    grep   -o "$estado.*$rep" /home/efc20/Proyecto/CasosPositivos.csv >&3
    done
    

관련 정보