有一个脚本可以解析具有不同行数的 txt 文件:
project1 220EEOOBC45
project2 BC45220EEO3
project...
projectn 3563GFGFG34
并附加到json:
{ "name": "project1", "revision": "220EEOOBC45"},
{ "name": "project2", "revision": "BC45220EEO3"},
....
{ "name": "projectn", "revision": "3563GFGFG34"}]}
脚本:
awk '{print "{ \"name\": \"" $1 "\", \"revision\": \"" substr($2,1,12) "\"},"}END{print "{ \"name\": \"" $1 "\", \"revision\": \"" substr($2,1,12) "\"}]}"}' info.txt >> result.json
sed -i -n 'x;1b;$x;p' result.json
因此,json 文件的开头已经存在,任务只是添加它。我使用 awk,它在处理完最后一行后将其复制,但带有结束标签]}且没有逗号,然后 sed 删除倒数第二行重复的行。我认为这是一些非常奇怪的自行车。还有哪些其他选择或更合适的工作解决方案?不幸的是,不能使用jq或类似的。来自加或减 awk、sed、coreutils 类别的东西。
修正答案
处理第一行时,可以从输出需要的字符开始(为避免输出换行符,可以使用运算符
printf代替print):结果文件中逗号分隔行的输出可以通过从主调用中删除来移动到处理下一行的开头
printf:好吧,在块中
END{}您还可以显示最终字符:旧答案
和块可以在程序中用于将第一行和最后一行添加到awk解释器的输出中。
BEGIN{}END{}例子。
有一个简单的awk程序:
向其中添加块,在输出
{[的第一行之前输出一行,在输出]}的最后一行之后输出一行:如果您不能添加行,但需要在第一行和最后一行添加文本,那么使用sed解释器会更容易(比awk的情况) :
我将回答与评论完全不同的问题:
在awk解释器的程序中,定义最后一行是相当麻烦的。但第一个是基本确定(变量
NR存储输入文件的当前行号):