linux - 如何使用 shell 脚本将文本文件转换为 JSON 文件

标签 linux shell awk sed

我有一个看起来像这样的文件 (myfile.txt)

GYFUFGYO1  KMP-app   james@qt.com  CODE_SMELL
GYFUFGYO2  KMP-app   james@qt.com  CODE_SMELL
GYFUFGYG3  AFP-Login   nathan@qt.com  BUG
GYFUFGYG4  AFP-Login   nathan@qt.com  BUG
GYFUFGYO5  KMP-app   james@qt.com  CODE_SMELL
GYFUFGYO6  KMP-app   james@qt.com  CODE_SMELL

我必须将此文本内容写入 JSON 文件 (myfile.json)。 这是预期的输出

[
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"},
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"},
{"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"},
{"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"},
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"},
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}
]

这是我尝试过的

我创建了一个名为“textconvert.sh”的文件。然后写了一个这样的shell脚本。

echo"[" >> myfile.json
echo {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}, >> myfile.json
echo {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}, >> myfile.json
echo {"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"}, >> myfile.json
echo {"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"}, >> myfile.json
echo {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}, >> myfile.json
echo {"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"} >> myfile.json
echo"]" >> myfile.json

但我不允许这样硬编码。 我现在想的是,

写一个循环扫描“myfile.txt” 然后将列值分配给变量。 然后写一个json文件。

谁能帮我解决这个问题?

最佳答案

使用任何 awk:

$ cat tst.awk
BEGIN {
    fmt = "%s{\"ApplicationName\":\"%s\",\"BuildBreakReason\":\"%s\",\"DefectAuthor\": \"%s\"}"
    print "["
}
{ printf fmt, sep, $2, $4, $3; sep="," ORS }
END { print ORS "]" }

$ awk -f tst.awk myfile.txt
[
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"},
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"},
{"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"},
{"ApplicationName":"AFP-Login","BuildBreakReason":"BUG","DefectAuthor": "nathan@qt.com"},
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"},
{"ApplicationName":"KMP-app","BuildBreakReason":"CODE_SMELL","DefectAuthor": "james@qt.com"}
]

关于 我现在想的是,写一个循环来扫描“myfile.txt”... 从你的问题 - 不,不要那样做。参见 why-is-using-a-shell-loop-to-process-text-considered-bad-practice .

关于linux - 如何使用 shell 脚本将文本文件转换为 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73568203/

相关文章:

c - 系统命令 rm 在 expect 程序中不起作用

linux - 过滤 netstat 输出以获取 bash 中的特定端口

linux - 如何使用完整路径或文件名显示 'grep' 结果

java - 如何在java中显示每10秒循环中的值

linux - Bash 脚本不返回任何输出

linux - Ansible 任务写入本地日志文件

c - C 中 fork、execvp 出错?

html - Linux中的Linkify文本文件

linux - 在内部使用AWK命令包装TCL/TK文件

Linux 逐行读取文件并报告