あるファイルからコンテンツを取得し、別のファイルにいくつかのコンテンツを生成するようにwhileループを作成しようとしています。しかし、私はファイルのすべての行ではなく、ファイルの最後の行だけを生成することに気づきました。私がここで何を見逃しているのでしょうか?それとも私のエコー方法が間違っていますか?
"test"という名前の私のファイルには文字列のリストが含まれています。
unix_idx
web_pn_iis
wis_healthpartners
次のコマンドを使用してwhileループを作成しようとしています。
while read -r line;
do
echo " {
\"name\": \"$line\",
\"datatype\": \"event\",
\"searchableDays\": 180,
\"maxDataSizeMB\": 0,
\"totalEventCount\": \"0\",
\"totalRawSizeMB\": \"0\"
}," > myfile.json;
done < test;
ただし、コマンドが実行されると、myfile.jsonにはテストファイルから読み込まれた最後の行のみが含まれます。つまり、wis_healthpartners
{
"name": "wis_healthpartners",
"datatype": "event",
"searchableDays": 180,
"maxDataSizeMB": 0,
"totalEventCount": "0",
"totalRawSizeMB": "0"
},
だからwhileループの実行中にエコーが書かれ、最後の行だけが残ったと思います。すべての行を含めるようにどのように調整しますか?私が望む出力は次のとおりです。
{
"name": "unix_idx",
"datatype": "event",
"searchableDays": 180,
"maxDataSizeMB": 0,
"totalEventCount": "0",
"totalRawSizeMB": "0"
},
{
"name": "web_pn_iis",
"datatype": "event",
"searchableDays": 180,
"maxDataSizeMB": 0,
"totalEventCount": "0",
"totalRawSizeMB": "0"
},
{
"name": "wis_healthpartners",
"datatype": "event",
"searchableDays": 180,
"maxDataSizeMB": 0,
"totalEventCount": "0",
"totalRawSizeMB": "0"
},
ベストアンサー1
Bashでは、>
オペレータはオペレータが追加中にファイル内の既存のデータを意図的に上書きします>>
。
始める前にファイルが空であることを確認する必要がある場合は、printf "" > myfile.json
ループが実行される前にファイルを消去してから>>
最後まで書き込みを続けることができます。