2016-03-05 45 views
0

我有一個包含很多JSON項,像這樣一個巨大的文本文件:排序非常大的量JSON項使用命令行

{"name":"Bob","id":1,"gender":"<gender>","height":186} 
{"name":"Alice","id":4,"gender":"<gender>","height":176} 
{"name":"Bill","id":3,"gender":"<gender>","height":181} 
{"name":"Cathy","id":2,"gender":"<gender>","height":172} 

我想這些排序由他們的「ID」值。這些文件太大而不適合內存,所以腳本語言似乎不是一種選擇。有什麼辦法可以使用linux命令行來解決這個問題嗎?我想獲得以下輸出:

{"name":"Bob","id":1,"gender":"<gender>","height":186} 
{"name":"Cathy","id":2,"gender":"<gender>","height":172} 
{"name":"Bill","id":3,"gender":"<gender>","height":181} 
{"name":"Alice","id":4,"gender":"<gender>","height":176} 

我一直在尋找到使用sort作爲,似乎非常適合處理非常大的文件。但是,我發現很難指示它使用id值。

+0

編輯你Q顯示你最好的猜測「使用'sort'」。你應該可以使用'sort -t'這樣的東西:「-k4,4 file'(這很醜陋,可能會被證明是脆弱的)。祝你好運。 – shellter

+0

'sort --field-separator =:--key = 3.1 file'作品 –

+2

其他評論和答案解釋瞭如何使用'sort'命令,這是一個很好的方法,*如果id字段總是相同在線上的位置。 (就json而言,當然並不是必須的)。你可以通過運行'cut -d,-f 2 file | grep -v'^「id」:''。這將打印第二個逗號分隔的字段不是id的所有行。如果該命令的輸出爲空,那麼'sort'方法是有效的,並且會產生正確的結果。 –

回答

2

您可以使用:

sort --numeric-sort --field-separator=: --key=3 --temporary-directory=somedir file

如果需要的過程中數據不適合在內存中,然後 ,排序使用(的somedir代替$ TMPDIR/tmp)。