2012-02-08 73 views
0

如果我从一个命令的输出,输出以下列方式信息:需要从命令输出1行,将它并把它放在一个新的文件一行一行

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

有没有一种办法传递值到grep/awk和有它创建与每行

所以值为1把信息到一个文件中的新文件最好我要寻找的文件输出会读

value1 
value2 
value3 
value4 
value5: 10001 
value6: 999.99 

赏识e任何指针。

+2

Euh,那输出会很糟糕。 – Mat 2012-02-08 13:04:04

+1

为什么输出在第一行没有'value1:value2',第二行'value3:value4'? – Johnsyweb 2012-02-08 13:04:14

回答

0

输入看起来像JSON。如果是这样的话,你可能应该使用现有的库将它解析为JSON,并选择一种语言(我会自己使用Ruby)。

但如果输入格式是简单的(例如,引用的字符串不包含任何会保证复杂的分析),您可以逃脱的东西线沿线的简单:

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

(请注意,这实际上并不完全符合您的要求,如果引号字符串中有逗号,就会中断。如果沿着此路径进行必要的修改。)

+0

感谢你的权利,它是JSON,我不能改变输出格式,因为它是从api调用返回的。该awk行返回足够接近我所需要的,当然足够的工作,感谢您的帮助! – user1190083 2012-02-08 13:46:55

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 
相关问题