分組這個問題確實很難用一句話來形容,所以原諒我,如果標題沒有抓住什麼,我下面寫..以列的值在一個文件中的平均值,由一個因素,另一個文件AWK
我有兩個文件,第一個文件(FILE1.TXT)包含:
Chr1 1 0
Chr1 2 0
Chr1 3 3
Chr1 4 0
Chr1 5 5
Chr1 6 0
Chr1 7 0
Chr1 8 0
Chr1 9 0
Chr1 10 7
Chr1 11 0
Chr1 12 0
Chr1 13 0
Chr1 14 9
Chr1 15 0
Chr1 16 0
Chr1 17 0
Chr1 18 0
Chr1 19 0
Chr1 20 0
Chr2 1 0
Chr2 2 0
Chr2 3 0
Chr2 4 9
Chr2 5 10
Chr2 6 1
Chr2 7 0
Chr2 8 0
Chr2 9 0
Chr2 10 0
CHR1和CHR2代表染色體(列1)和列2包含在染色體上的位置。請注意如何人數總是從1開始,然後上升到一個更大的數字,但未知號碼(CHR 1,它在20結束)。第三列包含在該染色體位置對應的計。
FILE2.TXT看起來是這樣的:
Chr1 1 10
Chr1 5 15
Chr1 10 20
Chr1 15 25
Chr5 1 10
它指定了10個職位分開(將在有序的窗口:起始位置增量爲5上升,但窗口大小爲10 )。
我需要平均每個窗口內的計數。
爲CHR1位置1到位置CHR1的窗口10 結合了計0 + 0 + 3 + 0 + 5 + 0 + 0 + 0 + 0 + 7 = 15 所以平均是15/10(大小窗口)= 1.5
窗口爲CHR1位置5至CHR1位置15 已經5 + 0 + 0 + 0 + 0 + 7 + 0 + 0 + 0 + 9 + 0 = 21 所以平均合併計數是21/11(窗口的大小)= 1.909
Chr1位置10到Chr1位置20 的窗口的組合計數爲7 + 0 + 0 + 0 + 9 + 0 + 0 + 0 + 0 + 0 + 0 = 16 因此平均值爲16/11(窗口的大小)= 1.454
窗口爲CHR1位置15至CHR1位置25(最後5個位置在範圍之外) 結合了計0 + 0 + 0 + 0 + 0 + 0 = 0 所以平均是0
爲CHR5位置1到位置CHR5 10(FILE1.TXT沒有記錄)的窗口 所以平均是0
輸出應爲:
Chr1 1 10 1.5
Chr1 5 15 1.909
Chr1 10 20 1.454
Chr1 15 25 0
Chr5 1 10 0
注意CHR2怎麼不在輸出文件,因爲文件2有沒有爲CHR2指定的任何窗口..
我編碼在Perl的東西來解決這個問題,但是,它是由於相當緩慢file1.txt的大尺寸。是用awk這個問題有解?我希望它可以提供更快(和更短)的解決方案..我想這個解決方案將涉及一個關聯數組,但迄今爲止我已經想出瞭如何加入到第一列和第二列,這甚至不能解決問題..
awk 'FNR==NR{a[$1,$2]=$3;next}{ print a[$1,$2]}' file1.txt file2.txt
或者這個問題不適合awk嗎?
謝謝,這看起來不錯。除了我認爲它應該是總數/($ 3- $ 2 + 1)? – SonicProtein