2013-08-29 77 views
0

我想計算每行的第2列和第3列的平均值,將該值加1並打印整行。一些平均值將是浮點數。Unix shell腳本中的算法

輸入文件看起來是這樣的:

chr20 2330559 2330737 
chr20 2332853 2333041 
chr20 2537555 2537711 

輸出文件:

chr20 2330648 2330649 
chr20 2332947 2332948 
chr20 2537633 2537634 

我已經試過AWK的各種組合都沒有成功。任何建議都會很棒! 感謝 哈里特

回答

3

這個用awk:

awk '{$2=($2+$3)/2; $3=$2+1}1' file 

您還可以使用int()功能,以確保結果是整數:

awk '{$2=int(($2+$3)/2); $3=$2+1}1' file 
+0

啊!我貼上評論後,(ninjia一),我按了upvote按鈕,然後我發現這是我自己的答案!這裏是地方... – Kent

2

嘗試這一個班輪:

awk '{a=($2+$3)/2;$2=a;$3=a+1}7' file 

它給出

chr20 2330648 2330649 
chr20 2332947 2332948 
chr20 2537633 2537634 
+0

用兩個字符打敗你:p – user000001

+1

@ user000001'sed's/vim/awk /'<<<「真正的Vim ninjas會計算每個擊鍵 - 你嗎?:) :) – Kent

2

喜歡的東西:

awk '{ printf("%s %d %d", $1, ($2 + $3)/2, ($2 + $3)/2 + 1) }' 

你沒有給過當平均是不是整數什麼應該發生的任何指示。

+0

如果平均不是一個整數,我仍然希望打印出一個整數或舍入。謝謝 – user1879573

+0

@ user1879573對此使用'int()'函數 – user000001

+1

@ user1879573在這種情況下,我的答案已經舍入到最接近的整數。 – Phylogenesis