AWKでJSONを連結する
AWKで複数のJSONファイルを連結したかったので、それのメモ。Gruntが使える場合はgrunt-contrib-concatのbanner, separator, footerを使うと同様のことができる。
いくつかのJSONを用意する。
$ head *.json
==> aaa.json <==
{
"aaa": 1
}
==> bbb.json <==
{
"bbb": 2
}
==> ccc.json <==
{
"ccc": 3
}
AWKスクリプトを用意する。
BEGIN {
RS=""
ORS=""
print "{\"items\":["
}
{
if (NR == 1) {
print $0
} else {
print "," $0
}
}
END {
print "]}"
}
AWKにスクリプトとJSONのファイルを渡す。
$ awk -f concat.awk aaa.json bbb.json ccc.json
{"items":[{
"aaa": 1
},{
"bbb": 2
},{
"ccc": 3
}]}
余計な空白などがあるが、それはファイルに出力したあとにnodeでrequire
してJSON.stringify
のあとにfs.writeFileSync
すれば良いと思う。
process.stdin
がもう少し楽に扱えればawk
からの出力をそのまま整形できるんだけど。