2017-01-11 29 views
1

任務所以我有一個文本文件是這樣的:重複一個awk文件的不同的變量

1.0 56 
2.0 48 
1.0 78 
1.0 12 
3.0 68 

的1.0,2.0是所有的用戶ID和我有截止到43.0。所以我寫了一個awk腳本來處理該文件:

BEGIN { 
    total = 0 
} 
{ 
    length = $2 
} 
{ 
    if ($1 == "1.0") { 
    total += length 
    } 
} 
END { 
    printf("%.2f\n",total) 
} 

所以基本上它需要用戶1.0的長度之和並將其總和。我也必須對其他用戶這樣做。我應該在腳本中做什麼修改,以便爲用戶1.0,2.0,3.0等完全處理文本文件,並將每個用戶的總計作爲輸出(而不必每次必須更改awk文件) )

回答

1

你可以做這樣的事情在awk

awk '{unique[$1]+=$2}END{for (i in unique) print i,unique[i]}' input-file 

的想法是上面創建一個哈希地圖,與$1是從1.02.0等方面有着自己的價值觀數組中的唯一項我們在文件中添加長度爲$2的值。由於數組索引爲$1,因此該命令會更新文件中每個唯一用戶的總和。 END子句在處理完所有行後執行,基本上用計算的總和打印出用戶標識。

+0

謝謝。有用 – instame