从命令中获取1行输出,将其拆分并逐行放入新文件中

时间:2012-02-08 12:59:25

标签: awk grep

如果我从以下列方式输出信息的命令中获得输出:

{"value1":"value2","value3":"value4","value5":10001,"value6":999.99,}

有没有办法将该值传递给grep / awk并让它创建一个新文件,将信息放入每行1个值的文件中

理想情况下,我在文件中寻找的输出会读取

value1
value2
value3
value4
value5: 10001
value6: 999.99

欣赏任何指针。

2 个答案:

答案 0 :(得分:0)

输入看起来像JSON。如果它是你应该使用现有的库解析它作为你选择的语言的JSON(我会自己使用Ruby)。

但是如果输入格式很简单(例如,引用的字符串不包含任何可以保证复杂解析的内容),那么您可以通过以下方式处理简单的事情:

awk -F , '{ gsub(/(^{)|(}$)|"/, ""); for (i = 1; i <= NF; ++i) print $i }'

(请注意,这实际上并不完全符合您的要求,如果引用的字符串中有逗号,它就会中断。如果沿着这条路走下去,请根据需要进行修改。)

答案 1 :(得分:0)

嗯,你期待有点奇怪的输出......无论如何,sed

$ echo '{"value1":"value2","value3":"value4","value5":10001,"value6":999.99,}' | sed '{ s/[\{"\}]//g ; s/,/\n/g ; s/:\([^0-9]\)/\n\1/g; s/:\([0-9]\)/: \1/g}'                                                                     
value1
value2
value3
value4
value5: 10001
value6: 999.99