2012-06-18 337 views
2

我一直在使用grep -f從一個文件中獲取模式並從另一個文件中提取行。 的結果是象下面這樣:將grep命令的結果分組

1 11294199 11294322 40 10 123 0.0813008 
1 11294199 11294322 41 6 123 0.0487805 
1 11294199 11294322 42 10 123 0.0813008 
1 11294199 11294322 43 2 123 0.0162602 
1 11293454 11293544 51 1 90 0.0111111 
1 11293454 11293544 52 2 90 0.0222222 
1 11291356 11291491 54 6 135 0.0444444 
1 11291356 11291491 55 8 135 0.0592593 
1 11291356 11291491 56 3 135 0.0222222 

現在我需要組的結果基礎上,前三列,並計算各組的第4列的總和:

1 11294199 11294322 (40+41+42+43) 
1 11293454 11293544 (51+52) 
1 11291356 11291491 (54+55+56) 

哪有我得到這樣的結果?在grep中的任何選項來實現這一目標? thx

回答

5

您將需要awk做你想做的。試試這個:

awk '{ array[$1 "\t" $2 "\t" $3] += $4 } END { for (i in array) print i "\t" array[i] }' file.txt 

結果:

1 11294199 11294322 166 
1 11291356 11291491 165 
1 11293454 11293544 103 

HTH