Text-Processing
循環遍歷具有唯一標識符的文件併計算累積和
我有一個大文本文件,如下所示,其中 column1-colum3 定義一個區域,第四列是唯一標識符。第 6 列分配了區域的值。
chr6 26204834 26204839 region1 + 119.862 chr6 26204834 26204835 + 0.982 chr6 26204834 26204839 region1 + 119.862 chr6 26204835 26204836 + 8.487 chr6 26204834 26204839 region1 + 119.862 chr6 26204836 26204837 + 2.664 chr6 26204834 26204839 region1 + 119.862 chr6 26204837 26204838 + 105.065 chr6 26204834 26204839 region1 + 119.862 chr6 26204838 26204839 + 2.664 chr18 72218300 72218307 region2 + 113.879 chr18 72218300 72218301 + 0.982 chr18 72218300 72218307 region2 + 113.879 chr18 72218303 72218304 + 1.357 chr18 72218300 72218307 region2 + 113.879 chr18 72218304 72218305 + 4.887 chr18 72218300 72218307 region2 + 113.879 chr18 72218305 72218306 + 1.706 chr18 72218300 72218307 region2 + 113.879 chr18 72218306 72218307 + 104.947
column7-column9 是 sub-region,其中 column11 是 sub-region 的賦值。
輸出:我想為每個標識符中的每個子區域分配累積總和。
cat input | grep region1 | awk '{ sum+=$11 } { print $0"\t"sum/$6 }'
這為一個標識符提供了正確的預期輸出
chr6 26204834 26204839 region1 + 119.862 chr6 26204834 26204835 + 0.982 0.00819276 chr6 26204834 26204839 region1 + 119.862 chr6 26204835 26204836 + 8.487 0.0789992 chr6 26204834 26204839 region1 + 119.862 chr6 26204836 26204837 + 2.664 0.101225 chr6 26204834 26204839 region1 + 119.862 chr6 26204837 26204838 + 105.065 0.977774 chr6 26204834 26204839 region1 + 119.862 chr6 26204838 26204839 + 2.664 1
同樣對於另一個標識符
cat input | grep region2 | awk '{ sum+=$11 } { print $0"\t"sum/$6 }' chr18 72218300 72218307 region2 + 113.879 chr18 72218300 72218301 + 0.982 0.00862319 chr18 72218300 72218307 region2 + 113.879 chr18 72218303 72218304 + 1.357 0.0205393 chr18 72218300 72218307 region2 + 113.879 chr18 72218304 72218305 + 4.887 0.0634533 chr18 72218300 72218307 region2 + 113.879 chr18 72218305 72218306 + 1.706 0.0784341 chr18 72218300 72218307 region2 + 113.879 chr18 72218306 72218307 + 104.947 1
我如何通過在數組中定義所有標識符並通過文本文件執行來自動執行此操作。
這是一種方法:
$ awk -vOFS='\t' '{ a[$4]+=$11/$6; print $0,a[$4]}' file chr6 26204834 26204839 region1 + 119.862 chr6 26204834 26204835 + 0.982 0.00819276 chr6 26204834 26204839 region1 + 119.862 chr6 26204835 26204836 + 8.487 0.0789992 chr6 26204834 26204839 region1 + 119.862 chr6 26204836 26204837 + 2.664 0.101225 chr6 26204834 26204839 region1 + 119.862 chr6 26204837 26204838 + 105.065 0.977774 chr6 26204834 26204839 region1 + 119.862 chr6 26204838 26204839 + 2.664 1 chr18 72218300 72218307 region2 + 113.879 chr18 72218300 72218301 + 0.982 0.00862319 chr18 72218300 72218307 region2 + 113.879 chr18 72218303 72218304 + 1.357 0.0205393 chr18 72218300 72218307 region2 + 113.879 chr18 72218304 72218305 + 4.887 0.0634533 chr18 72218300 72218307 region2 + 113.879 chr18 72218305 72218306 + 1.706 0.0784341 chr18 72218300 72218307 region2 + 113.879 chr18 72218306 72218307 + 104.947 1
訣竅是使用區域標識符作為關聯數組的鍵(
a
在本例中為 )。然後,您可以在讀取文件時增加與該鍵關聯的值。