こんにちは、コミュニティの誰かがこのコードを書いています。問題は、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
ループ全体の出力を収集してファイルに書き込むことができるので、書き込みは一度だけ実行されます(つまり、ファイルを開くたびに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 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