2016-10-17 59 views
0

我試圖執行以下awk命令數學在AWK列

awk '{ if($3-$2 >= 1000) print $1"\t"$3-1000"\t"$3"\t"$4"\t"$5 ; else if($3-$2 < 1000) print $1"\t"$3-($3-$2/2)"\t"$3"\t"$4"\t"$5 }'file 

其中如果塔3和2之間的減法是> 1000然後按照一定的條件,否則遵循另一狀態,其中第2欄是第3欄(第3欄 - 第2/2欄)爲整數。該文件如下所示:

chrX 99885864 99887481 I7 - 
    chrX 99887566 99888401 I6 - 
    chrX 99888537 99888927 I5 - 
    chrX 99889027 99890174 I4 - 
    chrX 99890250 99890554 I3 - 
    chrX 99890744 99891187 I2 - 
    chrX 99892102 99894941 I1 - 
chr20 49552800 49557401 I8 - 
chr20 49557493 49557641 I7 - 
chr20 49557747 49558567 I6 - 
+0

你有什麼錯誤? – CoconutBandit

+0

我得到的是這樣的:chrX \t 4.99443e + 07 \t 99888927 i5或chr20 \t 2.47787e + 07 \t 49557641 I7,而不是整數 – AishwaryaKulkarni

+0

檢查[此帖](http://stackoverflow.com/a/12714193/3865495)出。它看起來像你不想科學記數法,'印刷'默認爲 – CoconutBandit

回答

2

您需要明確地覆蓋awk默認值或格式。

$ awk -v OFS='\t' '{$2=sprintf("%d",$3-(($3-$2>=1000)?1000:$2/2))}1' file 

chrX 99886481  99887481  I7  - 
chrX 49944618  99888401  I6  - 
chrX 49944658  99888927  I5  - 
chrX 99889174  99890174  I4  - 
chrX 49945429  99890554  I3  - 
chrX 49945815  99891187  I2  - 
chrX 99893941  99894941  I1  - 
chr20 49556401  49557401  I8  - 
chr20 24778894  49557641  I7  - 
chr20 24779693  49558567  I6  - 

ps。我認爲你的公式不正確的其他條件,否則在我的腳本中進行更改。

+0

嗨karakfa非常感謝我應該更具體,它是第3欄(第3欄 - 第2/2),而不是49944618它將是99888401-99887566 = 835,並將其除以2得到417.5,我從99888401中減去417得到99887984.我只是不知道如何在這個?:子句中添加除法。 – AishwaryaKulkarni

+0

'$ 3 - ($ 3- $ 2/2)= $ 2/2'你是不是指$ 3 - ($ 3- $ 2)/ 2'?如果用'($ 3- $ 2)/ 2'替換腳本中的$ 2/2' – karakfa

+0

哦,是的,對不起,我很困惑,當它非常明顯時,謝謝! – AishwaryaKulkarni