我有一个简单的日志文件,其内容如下:
1504007980.039:{"key":"valueA"}
1504007990.359:{"key":"valueB", "key2": "valueC"}
...
我想输出到多个文件,每个文件都包含时间戳后面的 JSON 部分作为内容。所以我会得到文件的结果:
1504007980039.json
1504007990359.json
...
这类似于 How to split one text file into multiple *.txt files?但文件名应该从每一行中提取(并删除多余的点),而不是通过索引生成
我最好想要一个可以在 bash 中执行的单行代码。
由于您没有使用 GNU awk,因此您需要关闭输出文件以避免“打开文件过多”错误。为了避免这种情况以及 JSON 中特定值的问题以及与输出重定向期间未定义行为相关的问题,您需要这样做:
awk '{
fname = $0
sub(/\./,"",fname)
sub(/:.*/,".json",fname)
sub(/[^:]+:/,"")
print >> fname
close(fname)
}' file
如果您发现这样做有一些好处,您当然可以将其压缩到一行:
awk '{f=$0;sub(/\./,"",f);sub(/:.*/,".json",f);sub(/[^:]+:/,"");print>>f;close(f)}' file
我是一名优秀的程序员,十分优秀!