我正在尝试创建一个 while 循环,以便它从一个文件中获取内容并在另一个文件上创建一些内容。但我注意到的是它只创建文件的最后一行,而不是文件中的所有行。我在这里想念什么?还是我的回声方法错误?
我的名为“test”的文件包含 ex 的字符串列表。
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"
},
在 Bash 中,
>
运算符有意覆盖文件中的任何现有数据,而>>
运算符将追加。如果您需要在开始之前确保文件为空,您可以
printf "" > myfile.json
在循环运行之前使用 清除它,然后使用>>
继续写入到最后。如果测试文件中的条目是正确引用的 JSON 字符串
然后您可以使用
jq
's--slurpfile
将它们拉入一个数组,然后对其进行迭代以从模板 JSON 文件创建一个对象数组:前任。
如果您必须使用未引用的元素,那么您可以执行相同的操作,
--rawfile
尽管它需要更多的工作:切片
[0:-1]
是必要的,因为split("\n")
将test
文件的尾随换行符解释为指示额外的空元素。