我想使用 echo 命令写入一个文件。 echo 命令将从另一个文件获取数据。
这是回显命令:
echo '{
name: $name
id: $seq
}
我有一个txt文件:
customer 1
customer 2
customer 3
所以我想生成一个文件,执行 echo 并替换 txt 文件第一行中的 $name 。
然后将 $seq 开头替换为 1。
这就是我想要的文件。
{
name: customer 1
id: 1
}
{
name: customer 2
id: 2
}
{
name: customer 3
id: 3
}
读取第一行时,ID 应为 1,读取第二行时,ID 应为 2`
答案1
尝试
awk '{printf "{\n\tname: %s\n\tid: %d\n\t}\n",$0,NR}' file.txt
在哪里
printf
将跳过行、添加制表符和格式字符串。
对于id:
参数,您可以使用示例文件中的第二个字段,或从行号(即NR
(记录数)值)生成一个字段。
答案2
如果您想要正确的 JSON 格式的输出:
jq -Rs 'split("\n") |
.[0:-1] |
[ foreach .[] as $customer ( 0; .+1; { name: $customer, id: . } ) ]' ./file
或者,更短,
$ jq -Rs '[ foreach split("\n")[0:-1][] as $customer ( 0; .+1; { name: $customer, id: . } ) ]' ./file
我们将-Rs
未格式化的原始文本读取为单个字符串。这会在换行符上分割成一个数组split("\n")
,因为我们在数组末尾得到一个空值,所以我们将其删除.[0:-1]
(这会选择从第一个到第二个到最后一个的所有元素)。
使用与问题中相同的输入数据,我们现在有
[
"customer 1",
"customer 2",
"customer 3"
]
$customer
然后,我们使用每个元素和迭代器迭代该数组的值,并相应地使用和键.
构造一个对象数组。name
id
结果是
[
{
"name": "customer 1",
"id": 1
},
{
"name": "customer 2",
"id": 2
},
{
"name": "customer 3",
"id": 3
}
]