2015-05-29 14 views
0

所以到目前爲止我得到的是一個Bed-Table文件,這個文件的問題是,在某些行中,值在第2列中的值大於第3列中的值。AWK:需要交換兩列之間的值,如果左邊的一個比右邊的小

awk中是否有任何一個班輪,它們將交換這兩個值,以便表格總是在列2中獲得較小的值,在列3中獲得較大的值?

chr01 100 200 
chr02 300 150 

所以在這個例子中,所需的輸出將是:

chr01 100 200 
chr02 150 300 
+0

這是一張牀單文件嗎?即使谷歌似乎並不現在。 –

+0

牀文件是一張表格,其中包含基因組內DNA序列的座標。您可以使用它從基因組中提取序列,或者進行分析,如是否有基因,這些基因彼此接近或序列相互重疊。 – JadenBlaine

回答

1

只是交換列,如果他們是在錯誤的訂單,使用臨時變量:

$ awk '$2 > $3 { temp = $3; $3 = $2; $2 = temp } 1' OFS='\t' file 

1最後是{print}的通用速記,所以每行都打印出來。將輸出字段分隔符OFS設置爲製表符保留了格式。

或者:

$ awk -F'\t' '$2 > $3 { $0 = $1 FS $3 FS $2 } 1' file 

如果必要重新排列行的內容,使用輸入字段分隔符FS它已被設置爲製表符。

0

你可以用awk,

awk '$2>$3{x=$3;$3=$2;$2=x}1' file 
+2

該命令會切換所需的值,但它會導致錯誤,因爲它會以某種方式刪除列之間的選項卡 – JadenBlaine

+0

'awk'$ 2> $ 3 {x = $ 3; $ 3 = $ 2; $ 2 = x} 1' sed的/ \ +/\ t/g'' –

0
awk '{ printf("%s %d %d\n",$1,($2 < $3) ? $2 : $3,($2 < $3) ? $3 : $2) }' file 
相關問題