2012-02-08 24 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 
相關問題