あるファイルの内容を別のファイルに出力するには、whileループを作成します。

あるファイルの内容を別のファイルに出力するには、whileループを作成します。

あるファイルからコンテンツを取得し、別のファイルにいくつかのコンテンツを生成するように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ループが実行される前にファイルを消去してから>>最後まで書き込みを続けることができます。

おすすめ記事