2013-03-19 66 views
0

我有一個數據日誌文件(比如說,log.dat等),看起來像這樣(的玩具爲例):排序在外殼處由某一個領域的文本文件/蟒蛇

S('2 」, '3')102.3993 2992 0.22 0.33
S( '4', '6')105.44 2993 0.43 0.93
S('19' , '33')99.93 28992 0.99 0.29
....(類似於模式)

我想用bash shell或python來排序數據日誌文件的第二個字段。這意味着輸出文件看起來像:

S('19' , '33')99.93 28992 0.99 0.29
S( '2', '3')102.3993 2992 0.22 0.33
S('4 ','6')105.44 2993 0.43 0.93

我該如何做到這一點與shell腳本或python到位?也許最好是追加一個表示每行的排名的尾字段(1,2,3,...)最終目標是在第二個字段中繪製gnuplot中的日誌文件

+5

你試過了什麼嗎?這是使用python相對容易的事情。我想,使用shell'sort'命令也很容易。 (提示,看看'sort'的'-n -k'標誌)。當然,你不能真正做到「就地」)。反正也不容易。你可以做的最好的事情是對新文件進行排序,並將新文件寫入舊文件。 – mgilson 2013-03-19 13:57:07

+0

@mgilson - 您可以在適當位置排序。請參閱'sort -o'。 – 2013-03-19 14:04:27

+0

@Robᵩ - 這實際上並沒有排序。這只是將輸出文件寫入輸入文件的頂部,就像我所說的那樣。 – mgilson 2013-03-19 14:06:05

回答

2

從bash命令行,嘗試sort(1)命令:

$ sort -k2,2 -n -o log.dat log.dat 
1

試試這個:

$ sort -k2 -n inputFile > outputFile 

其中:

  • -n,--numeric排序 根據字符串數值比較
  • -k,--key = POS1 [,POS2] 開始在POS1一個鍵(原點1),結束它在POS2(線的默認端)

N.B. -t,--field-separator = SEP使用SEP而不是非空白來空白轉換,所以我們使用默認字段分隔符