您好,社区中的某人编写了这段代码。问题是,当我尝试将 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
被调用多次。接下来的每个调用都会覆盖前一个调用的输出。
您可以改为附加:
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
您可以收集整个循环的输出并将其写入文件,这样只需一次写入(即文件的一次打开)。存在一定的风险,即循环的其他部分(更改代码后)创建的输出会无意中写入同一文件。
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
最优雅的解决方案(在这种情况下没有实际区别)是打开一个新的文件描述符:
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