我有一个供应商提供的应用程序,它以JSON格式输出node.js winston日志,我正尝试将其输出为单行csv格式。
有许多不同类型的数组类型,我使用“jq”来成功地从每个元素中去掉我想要的元素。
原始的是如下的东西:
{"result":{"TransactionID":"ac710dc0-8aa4-11e8-a08c-0d98209bb4f5","TimeStamp":"2018-07-18T12:07:33.082-04:00","SourceSystem":"SOUP","Status":"Accepted"},"level":"info","message":"SOAP createServiceRequest ack recieved & is successful.","timestamp":"2018-07-18T16:07:33.047Z"}
当前输出的命令字符串(减去@csv)如下:
[
"2018-07-18T16:07:33.047Z",
"info",
"SOAP createServiceRequest ack recieved & is successful.",
"ac710dc0-8aa4-11e8-a08c-0d98209bb4f5",
"2018-07-18T12:07:33.082-04:00",
"Accepted"
]
我在SE上读过很多关于输出到csv的文章,它看起来比较直截了当,但我总是会出错。
tail -200 ClientOutbound.log | jq-win64.exe --raw-output "[.timestamp, .level, .message, .result .TransactionID, .result .TimeStamp, .result .Status|tostring|@csv]"
尽管存在上述@csv,但无论如何缩小包含的字段范围,我都会遇到如下错误。它只是移动错误。
jq: error (at <stdin>:199): string ("2018-07-18...) cannot be csv-formatted, only array
数组外部的@csv会产生一个类似的错误,其细节不同,但甚至无法解析JSON。
c:\Nodejs\Logs> jq-win64.exe --raw-output @csv ClientOutbound.log "[.level, .message, .result .TransactionID, .result .TimeStamp, .result .Status]"
例如,从什么类型的数组:
jq: error (at NCRClientOutbound.log:2074): object ({"level":"i...) cannot be csv-formatted, only array
jq:error(at ncclientoutbound.log:2075):对象(“argv”:[”d…)不能是csv格式的,只有数组
jq:error(at ncclientoutbound.log:2076):对象(“createser…”)不能是csv格式的,只能是数组
jq:error(at ncclientoutbound.log:2077):对象(“lastreque…”)不能是csv格式的,只能是数组
jq:error(at ncclientoutbound.log:2078):对象(“result”:…)不能是csv格式的,只能是数组
我要寻找的最终结果是这样的东西(有或没有新的封装[])(最好没有),但每一行都在同一行上。作为奖励,将是一个唯一的行标识符。
"2018-07-18T16:07:33.047Z", "info", "SOAP createServiceRequest ack recieved & is successful.", "ac710dc0-8aa4-11e8-a08c-0d98209bb4f5", "2018-07-18T12:07:33.082-04:00", "Accepted"
我需要做什么来克服我的错误并获得所需的输出?